(python)判断一个整数正序(从左向右)和倒序(从右向左)读都是一样的整数,回文数--算法

1、简单方法直接转化为字符串进行处理,转化为字符串后对应的每个位置上的数字都可以通过切片取出

def palindromenum(num):
   num = str(num)
   #此处不管是奇数个还是偶数个直接使用//进行取整
    n = len(num) // 2
    for i in range(0, n):
        if num[i] != num[-i-1]:
            return False
    return True

2、将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文数。 但是,如果反转后的数字大于int.max,我们将遇到整数溢出问题。所有不能盲目的进行反转,为了避免出现溢出的问题,我们可以仅反转一半的数字,然后与另一半的数字进行比较。

def palindromenum(num):
#用来排除负数和数字末尾为0的数字(其实负数可以不用排除)
    if num < 0 or num % 10 == 0 and num != 0:
        return False
    a = 0
    #当反转后的数字小于剩余数字时继续进行反转,如果为负数此处立刻就不符合因此上方代码可以不排除负数
    while a < num:
       #取出剩余数字的最后一位
        n = num % 10
        #计算剩余数字
        num = (num - n) / 10
        #计算反转后数字
        a = 10 * a + n
    #由于上方代码跳出循环有可能a=num,a>num。等于的可以不判断(回文数),只判断大于的即可,当去掉最后一位两个数字相等的情况下为回文数
    if a > num:
        m = a //10
        if m != num:
            return False
    return True

在计算速度上,第二个方法略优于字符串的方法,具体时间复杂度不清楚,为测试后结果!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值