【问题标题】:Generalized project euler #4广义项目 euler #4
【发布时间】:2013-09-26 09:28:25
【问题描述】:

我尝试了一些基本的优化,以减少通用euler problem #4的操作次数:

def is_palindrome(num):
    return str(num) == str(num)[::-1]

def fn(n):
    max_palindrome = 1
    for x in range(n,1,-1):
        for y in range(n,x-1,-1):
            if is_palindrome(x*y) and x*y > max_palindrome:
                max_palindrome = x*y
            elif x * y < max_palindrome:
                break
    return max_palindrome

print fn(999)

我可以/如何进一步优化它? (假设它是一般解决方案,最多为 n 而不是最多 999)。

【问题讨论】:

  • 我假设你已经看到了这个答案:stackoverflow.com/a/12674588/895932 那么你想要的是改变你的代码还是什么?
  • 是的 - 我正在做这些练习来升级我的 python-fu,并寻找有关如何使我的代码更快的反馈
  • 旁白:如果您正在寻找 cmets 来改进工作代码,您应该查看codereview

标签: python


【解决方案1】:

一些小的优化:您可以在x-loop 的早期中断并通过交换检查来减少对is_palindrome 的调用次数(未经测试):

def fn(n):
    max_palindrome = 1
    for x in range(n,1,-1):
        if x * n <= max_palindrome: # nothing bigger possible for remaining x
            break
        for y in range(n,x-1,-1):
            if x * y <= max_palindrome: #nothing bigger possible for current x
                break
            if is_palindrome(x*y):
                max_palindrome = x*y
    return max_palindrome

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2023-03-21
    • 2020-10-30
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多