题目来源
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)