9.回文数

120 阅读1分钟

题目来源

LeetCode 9.回文数
leetcode-cn.com/problems/pa…

解决方案

"""
@author: LiShiHang
@software: PyCharm
@file: 9.回文数.py
@time: 2018/12/22 22:08
@desc:
"""


class Solution:

    # 方法1,使用字符串,也太简单了吧,python大法好

    def isPalindrome(self, x):
        """
        :type x: int
        :rtype: bool
        """

        # 长度为n的话,时间复杂度O(n),空间复杂度O(n),452ms
        # x = str(x)
        # return x == x[::-1]

        # 只比较一半字符串,492ms
        x = str(x)
        for i in range(len(x) // 2):
            if x[i] != x[len(x) - 1 - i]:
                return False
        return True

    # 方法2,去头去尾,时间复杂度O(n),空间复杂度O(1),424ms
    def isPalindrome2(self, x):

        if x == 0:
            return True
        if x < 0 or x % 10 == 0:
            return False

        # 求长度
        # length = 0
        # y = x
        # while True:
        #     y = y // 10
        #     length += 1
        #     if y == 0:
        #         break

        # 求长度,另一种方法
        import math
        length = int(math.log10(x)) + 1  # 向下取整
        mask = 10 ** (length - 1)
        for _ in range(length // 2):

            left = x // mask
            right = x % 10
            if left != right:
                return False
            x = x % mask
            x = x // 10
            mask = mask / 100
        return True


if __name__ == '__main__':
    nums = 12321

    ob = Solution()
    r = ob.isPalindrome2(nums)

    print(r)