Python 练习:四种方法实现回文数

题目:回文数的定义,反转过来后的数字同原数相等,如121,12321。写一个算法判断1-99999之间的数字,有多少个回文数,输出并统计总个数。

 

算法一:使用字符串的位置索引来实现

将1-99999之间的数字分为几组分别判断:

  • 1-999:正数第一位和倒数第一位相等。即 l [0]=l [-1]
  • 1000-99999:正数第一位和倒数第一位相等,且正数第二位=倒数第二位。即 l [0]=l [-1] 且 l [1]=l [-2]

当然也可以分为1-9和10-99999两组来判断,是同样的道理。分组的目的是为了避免超出索引范围报错。虽然能实现,但这是最笨的一种实现方式,不利于拓展。

# 最笨的方法,将1-99999之间的数字分为两组1-9,10-99999来分别判断和计数

n1=0
for m in range(10, 100000):
#因为range()函数是包含起点而不包含终点的,所以终点需要再增加一个数字
    l=str(m)
    #将int转化为支持下标的形式比如字符串
    if l[0] == l[-1] and l[1] == l[-2]:
        n1 = n1 + 1
        print(l)

n2=0
for m in range(1,10):
    l=str(m)
    if l[0]==l[-1]:
        n2=n2+1
        print(l)

print (n1+n2)

 

算法二:使用字符串的位置索引来实现

算法二是对算法一的优化,不进行分组判断,但是为了避免超出索引范围,先计算字符串的位数/2。在索引范围内进行判断,另外总结了反转后的索引和原数字索引的关系为 i = - i -1。

# 反转后的索引和原数字索引的关系为 i = - i -1

n=0
for m in range(1, 100000):
    l=str(m)
    for i in range(0,int(len(l)/2)):
        if l[i] != l[-i-1]:
            break
    else:
        print(l)
        n = n + 1
print (n)

 

算法三:使用字符串的切片来实现

使用字符串切片,str[index:index:step],中括号里面分别为:字符起点、终点和步长。如果 [::-1]则代表字符串反过来

#使用字符串切片,str[index:index:step],中括号里面分别为:字符起点、终点和步长。如果 [::-1]则可以使字符串反过来

n=0
for m in range(1, 100000):
    l = str(m)
    if l == l[::-1]:
        n=n+1
        print (l)
print (n)

 

算法四:使用list列表的reverse()来实现

使用reverse()函数前,需要将原数字转化为list列表,并且反转元素的顺序后,需要将新列表中的元素拼起来,成为一个新的字符串。才能和原字符串比较。

# 使用list列表的reverse()函数

n=0
for m in range(1, 100000):
    l=str(m)
    list_x=list(l)
    list_x.reverse()

    # reverse 反转元素的顺序后,需要将元素拼起来成为一个新的字符串
    y="".join(list_x)

    if y==l:
        print (l)
        n=n+1
print(n)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值