回文数判断
判断一个数是否是回文数
【题目】
定义回文数的概念如下:
- 如果一个非负数左右完全对应,则该数是回文数,例如:121,22等。
- 如果一个负数的绝对值左右完全对应,也是回文数,例如:-121,-22等。
- 给定一个32位整数n,判断n是否是回文数。
算法思路
首先求绝对值,统一转换为非负数;
对于非负数,判断最高位和最低位是否相等,相等则继续判断中间数是否回文数。
e.g 32123,
最高位32123 // 10000 = 3,最低位32123 % 10 = 3,两者相等,判断中间数212((32123 % 10000) // 10);
最高位212 // 100 = 2,最低位212 % 10 = 2,两者相等,判断中间数1((212 % 100) // 10);
最高位1 // 1 = 1,最低位1 % 1 = 1,两者相等,判断0((1 % 1) // 10);
因此32123为回文数。
关于回文数判断,还有其他形式的题目。e.g. 判断链表结点组成的数是否构成回文数。
相应代码
# 判断一个数是否是回文数
def is_palindrome(n):
cur = abs(n)
help = 1
while cur // help >= 10:
help *= 10
while cur != 0:
first = cur // help
last = cur % 10
if first != last:
return False
cur = (cur % help) // 10
help = help // 100
return True
# 简单测试
if __name__ == '__main__':
n = 321123
print(is_palindrome(n))
有任何疑问和建议,欢迎在评论区留言和指正!
感谢您所花费的时间与精力!