我正在尝试修改答案以给出最接近的最低回文数。
我尝试修改这个答案:
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。我做错了什么?
最佳答案
如果您正在寻找前一个回文,您可以反转链接答案中的几个信号并添加边缘情况异常(exception)(对于 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_palindrome
和 prev_palindrome
的返回率严格高于/低于n
。
关于python - 如何获得给定数字的最接近、最小的回文数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005170/