查找最大回文集的最快算法,该回文是两个具有相同位数的数字的乘积

问题描述 投票:3回答:1

我如何使此代码在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

python palindrome
1个回答
0
投票
  1. 如果修复x>=y,它将变得更快,因此99*9191*99将不会被测试并单独找到
  2. [当发现回文时,内循环可以退出(因为它正在向下计数,因此对于相同的x可能发现的所有回文肯定小于”当前”回文)]
  3. 如果当前乘积小于当前最大值,则内部循环也可以退出
  4. 如果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
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.