回文数的几种解法

回文数指的是一个数字正着读和反着读,数字都是一样的,比如1221
回文数的问题一直在算法题里拥有很高的热度。它可以不断变着花样出题,比如特殊的回文数,回文质数…
给大家带来几种回文数的基本求法以及它们的优劣性,欢迎补充:

方法1

while True:
    try:
        n = int(input('输入一个四位数:'))

        if n%10 == n//1000:
            if n//10%10 == n//100%10:
                print('yes')
            else:
                print('no')
        else:
            print('no')            
    except:
        break

根据回文数的性质来判断,既然一个数是回文数,那么它的第一位和最后一位,第二位和倒数第二位…肯定是相同的,我们可以根据这样的性质来判断。
优点:没有用到循环语句,所以运行速度是很快,可以判断一些简单的数字
缺点:首先你必须要知道这个数是一个几位数,当不确定或者一直变化的时候,就要用到很多的if语句,代码长度是不可估量的。再者,当数字特别大的时候,往往不好处理,它的代码量和数字是成正比的。

方法2

while True:
    try:
        n = int(input('输入一个四位数:'))

        if n%10*1000+n//10%10*100+n//100%10*10+n//1000 == n:
            print('yes')
        else:
            print('no')
    except:
        break

这种方法属于硬方法,完全跟着回文数的思路来,既然要判断回文数,那么倒过来和它相等的数就是回文数。
优点:速度快,可以很快判断一些简单的数。
缺点:和方法一类似,同样需要知道数是几位数。

方法3

while True:
    try:
        n = int(input())
        j = n
        sum = 0
        while n>0:
            sum = sum*10+n%10
            n = n//10
        if sum == j:
            print('yes')
        else:
            print('no')
    except:
        break

和方法二的原理相同。
优点:可以判断任意n位数字,方便,灵活
缺点:硬核方法,当一个数字很简单的时候还用这种方法,有点杀鸡用牛刀的感觉。用到了循环,当我们要判断一组数里的回文数,并且这一组数很多很大,运行速度会慢。

方法四

while True:
    try:
        n = str(input())
        a = b = []
        for j in n:
            a.append(j)
        
        b = a[::-1]

        if a == b:
            print('yes')
        else:
            print('no')
    except:
        break

此方法是将一个str型的数字一个一个切片放入列表中,再将列表反转,如果和原列表相等的话,那么就是回文数。这是一个非常巧妙的方法,虽然用到了循环,但是循环量很少,所以速度运行也非常快。

其它方法

根据方法四可以演变为其他方法,比如在列表中判断第一位和最后一位是否相同…其实都用到了切片的方法,代码本质和方法四相同,且受用程度不是很大。
一般处理一组数字,并且数字不确定时,推荐使用方法四。当处理一些简单的方法时,可以使用前三个方法。

欢迎补充,以及提出疑问。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值