擅长:python、mysql、java
<p>我认为这段代码中的大部分时间都花在将字符串转换为整数上。其余的则是在Python解释器中对字符串进行切片和跳跃。这三件事该怎么办?代码中有一些不必要的转换,我们可以删除这些转换。我看不出有什么办法可以避免线切割。为了尽可能减少您在解释器中的时间,您只需编写尽可能少的代码:-),而且将所有代码放入函数中也有帮助。在</p>
<p>程序底部的代码有一两个错误,需要快速猜测以尝试避免调用<code>inc()</code>。我可以这样写这个部分:</p>
<pre><code>def nextPal(num):
lng = len(num)
guess = num[:lng//2] + num[(lng-1)//2::-1] # works whether lng is even or odd
if guess > num: # don't bother converting to int
return guess
else:
return inc(numstr, n)
</code></pre>
<p>这个简单的更改使您的代码对于不需要调用<code>inc</code>的数字的速度提高了大约100倍,对于需要调用它的数字,速度提高了大约3倍。在</p>
<p>为了做得更好,我认为您需要避免完全转换为int。这意味着在不使用普通Python整数加法的情况下递增数字的左半部分。您可以使用<code>array</code>并“手动”执行加法算法:</p>
^{pr2}$
<p>对于需要递增的数字,这又快了9倍左右。在</p>
<p>通过使用<code>while</code>循环而不是<code>for i in range(n - h - 1, -1, -1)</code>可以使这一点变得更快;通过让循环更新数组的两个半部分,而不是只更新左边的一半,然后在末尾反射它,这样可以使速度提高一倍。在</p>