如何获得给定数字的最接近的最低回文

时间:2016-03-15 07:41:26

标签: python math palindrome

我试图修改答案,给我最接近的最低回文数。

我尝试修改过这个问题的答案:

     def lowest(n):
        s = str(n + 1)
        l = len(s)
        if s[:l//2][::-1] < s[(l+1)//2:]:
            head = str(int(s[:(l+1)//2]))
        else:
            head = s[:(l+1)//2]
        print int(head + head[:l//2][::-1])

但是对于数字1000,它仍然返回1001.我做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您正在寻找之前的回文,您已在链接的答案中反转了几个信号并添加了边缘情况例外(对于10 ^ k + 1,对于所有偶数k&gt; ; 0)

def prev_palindrome(n):
    s = str(n - 1)
    l = len(s)
    if s[:l//2][::-1] > s[(l+1)//2:]:
        head = str(int(s[:(l+1)//2])-1)
    else:
        head = s[:(l+1)//2]
    if len(head) < l/2:
        return int(head + '9' + head[:l//2][::-1]) #edge case
    else:
        return int(head + head[:l//2][::-1])

如果您想要最近,可以尝试:

nxt = next_palindrome(n)
prv = prev_palindrome(n)

if abs(prv-n) <= abs(nxt-n):
    print prv
else:
    print nxt

请注意,next_palindromeprev_palindrome返回严格高于/低于n