• 题目要求:

  • 思路1(把str转换为list)

    • 先判断数字是否小于0,小于0返回False
    • 判断数字是否小于10,如果小于10,返回True,因为个位数是回文数
    • 如果上述两项都不符合,把字符串转换为list,用双指针遍历数组,一个指针指向list头,一个指针指向list尾,相向遍历,挨个比对,是否相同,相同则遍历下一个,不同则返回False,注意这个遍历的范围从0到数组的一半即可
  • 思路2(不把str转换为list)

    • 先判断数字是否小于0,小于0返回False
    • 判断数字是否小于10,如果小于10,返回True,因为个位数是回文数
    • 如果上述两项都不符合,定义一个res,使其等于给定的x,再定义一个tmp,把res的每一位数逆序保存到tmp中,最后返回tmp==x
  • 核心代码:
if x < 0:    return Falseif x < 10:    return Trueres = xtmp = 0# 当res不为0时,说明res的每一位还没都保存到tmp中,继续循环while res != 0:    # 把上一次循环的到的tmp乘10,加上当前的res的个位    tmp = tmp * 10 + res % 10    # 去掉res的个位    res //= 10# 循环结束,返回tmp是否等于xreturn tmp == x
  • 完整代码:
class Solution:    def isPalindrome(self, x: int) -> bool:        if x < 0:            return False        if x < 10:            return True        res = x        tmp = 0        while res != 0:            tmp = tmp * 10 + res % 10            res //= 10                return tmp == x