回文数判断

回文数判断

判断一个数是否是回文数

【题目】

定义回文数的概念如下:

  1. 如果一个非负数左右完全对应,则该数是回文数,例如:121,22等。
  2. 如果一个负数的绝对值左右完全对应,也是回文数,例如:-121,-22等。
  3. 给定一个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))

有任何疑问和建议,欢迎在评论区留言和指正!

感谢您所花费的时间与精力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值