我如何使此代码在30秒钟内运行以找到最大的回文数,该回文数是两个具有相同位数的数字的乘积?
def palindrome(maxInt):
pa=[]
for x in range(maxInt,0,-1):
for y in range(maxInt,0,-1):
num=x*y
if str(num) == str(num)[::-1]:
pa.append(num)
return max(pa)
maxInt
是具有指定数字的最大数字。例如,如果您想要的回文数是2个3位数的倍数,则maxInt
为999。如果您想要的最大回文数是2个4位数的倍数,maxInt
将为9999。等等。
如果为maxInt = 9
,则应输出9。
如果为maxInt = 99
,则应输出9009。
因此,如果maxInt = 999
,程序应输出906609。
如何使它在30秒内返回maxInt=9999
的99000099
x>=y
,它将变得更快,因此99*91
和91*99
将不会被测试并单独找到x
可能发现的所有回文肯定小于”当前”回文)]x*x
小于当前最大值,则外循环也可以退出def palindrome(maxInt):
maxpal=0
for x in range(maxInt,0,-1):
if x*x<maxpal: # 4.
break
for y in range(x,0,-1): # 1.
num=x*y
if num<maxpal: # 3.
break
if str(num) == str(num)[::-1]:
maxpal=num
break # 2.
return maxpal