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

问题描述:

我想修改答案以给出最接近的最低回文数。如何获得给定数字的最接近,最低回文数

我试图改变这个问题的答案:

 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

1001是一个回文,你的问题是什么? –

+0

'最接近,最低'回文到1000是999 – machinebit

+0

啊是的,抱歉!我读得太快了。那么你的算法不适应!它将数字的一半与另一个进行比较,以确定两个回文选项中哪一个最低。但是对于最低的那个,你有问题可以缩短(编写它需要更少的字符),就像你的例子。 –

如果你正在寻找的以前回文,你必须反转几个信号中的链接的答案,并添加一个边缘情况下的异常(10^K + 1,对于所有的偶数K> 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

+0

注意,如果'n'是一个回文,它回答'n'(用's = str(n-2)'它排除'n'并且回答严格低于'n'的最接近的) –