Python每日一练-----难题唯唯诺诺,易题重拳出击?(回文数)

不再平躺,每日一卷(day11)

目录

题目:

题目分析:

解题思路:

常规解法:

双指针解法:


题目:

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

🌠示例 1:

输入:x = 121

输出:true

🌠示例 2:

输入:x = -121

输出:false

原由:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

🌠示例 3:

输入:x = 10

输出:false

原由:从右向左读, 为 01 。因此它不是一个回文数。

题目分析:

题目简单易懂,如果是负数,那就肯定不是回文数了。如果是正数就将转置(首尾颠倒),要是和原数一样就是回文数。

解题思路:

将所给的数转置后判断转置后是否和原数相同

1.转置数字

2。判断转置后数值和原数值是否相通

如何转置数字?

我们知道数值是一个常量,不能直接对其进行位置的转换,但是列表可以

所以可以进行如下转化

❄如何将数字转化成字符串?

str()可以将数字或者将其他参数转化成字符串

例:str(123)

输出:'123'

❄如何将字符串转化成列表?

因为字符串可以迭代,所以可以遍历字符串并将其加入列表。

❄如何转置列表?

使用切片方法[::-1]

例:list = [1,2,3]

       print( list[::-1])

输出:[3,2,1]

值得注意的是:python有专门的方法reverse()将列表转置

但是使用这个方法没有返回值

例:list = [1,2,3]

       print( list.reverse())

输出:None(无输出)

代码实现

常规解法:

def isPalindrome(x):
        number = []
        for i in str(x):  # 带有负号为负数,不是回文数
            if i == '-':
                return False
            else:
                number.append(int(i)) # 遍历的i为字符串,用int()将字符串转化为数值
        lst = number[::-1]  # lst为转置列表
        return lst == number

 优化一下(发现字符串也可以用[::-1]转置

 def isPalindrome(x):
        return x>-1 and str(x)[::-1]==str(x)

双指针解法:

在列表首尾放入两个指针,不断移动首尾指针直到重合,并判断指针所在值是否相同

 

def isPalindrome(x):
    # 先将数值转化为列表
    number = []
    r = 1
    for i in str(x):
        if i != '-':
            number.append(int(i))
        else:
            return False
    j = 0                  # 放入指针
    k = len(number) - 1
    for t in range(len(number)//2):    # 指针移动的次数为列表长度的一半
        if number[j] == number[k]:
            j += 1
            k -= 1
            r *= 1
        else:
            r *= 0
    return r == 1

优化一下

def isPalindrome(x):
        lst = list(str(x))  # 不用int()转换,用list()生成列表
        j, k = 0, len(lst)-1
        while j <= k:
            if lst[j] != lst[k]:
                return  False
            j += 1
            k -= 1
        return True

完成。

❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄end❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄❄

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亖夕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值