LeetCode题解-python 9.回文数 Palindrome Number (Easy)

9.回文数 Palindrome Number (Easy)

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

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:

你能不将整数转为字符串来解决这个问题吗?

解题思路

不使用字符串来判断,也就是不使用额外的空间。
可以将原整数翻转,看反转后的整数是否和原来整数相等。
我第一次提交的代码:

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        y=x
        reverse=0
        while y:
            reverse=reverse*10+y%10
            y=y//10
        return x==reverse

在这里插入图片描述
执行时,显示超出时间限制,看官方题解,可能是数字反转可能导致的溢出问题,但是又看其他人说,因为 Python 语言本身的特性,这里反转整数时不需要考虑溢出,那我用的python为啥不行呢,求大神解释啊~~~~

为了避免数字反转可能导致的溢出问题,考虑只反转数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。

第二次提交的代码

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        #负数时,一定不是回文
        if x<0:
            return False
        reverse=0
        while x>reverse:
            reverse=reverse*10+x%10
            x=x//10
        return x==reverse or reverse//10==x

在这里插入图片描述
提交有错,对这种非零但是以0结尾的数字,判断错误,再在if里加上这个条件,第三次提交。

class Solution:
    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """
        #负数时,一定不是回文,结尾为0时,不是回文
        if x<0 or (x!=0 and x%10==0):
            return False
        reverse=0
        while x>reverse:
            reverse=reverse*10+x%10
            x=x//10
        return x==reverse or reverse//10==x

在这里插入图片描述
终于通过了!

github

链接: https://github.com/seattlegirl/leetcode/blob/master/palindrome-number.py.

猜你喜欢

转载自blog.csdn.net/LKY111/article/details/86644054