leetcode9-回文数

144 阅读1分钟

9.回文数 easy

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

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

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

class Solution(object):
    # 如果该数字是回文,后半部分反转后==原数字的前半部分
    def isPalindrome(self, x):
        """
    :type x: int
    :rtype: bool
    """
        if x < 0 or (x != 0 and x % 10 == 0):
            return False  # 负数和10的倍数不是
        new_x = 0
        while x > new_x:
            new_x = new_x * 10 + x % 10
            x //= 10
        return x == new_x or new_x // 10 == x
"""
对于数字 1221,执行 1221 % 10,得到最后一位数字 1,
先1221 // 10 = 122,再122 % 10 = 2,就可以得到倒数第二位数字。
把最后一位数字乘以 10,再加上倒数第二位数字,1 * 10 + 2 = 12,就得到了想要的反转后的数字。
如果继续这个过程,我们将得到更多位数的反转数字。
将原始数字x//10,然后给反转后的数字*10,
所以,当原始数字小于反转后的数字时,就已经处理了一半位数的数字。
"""