'''
题目
判断一个整数是否为回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例子
isPalindrome(1) -> True
isPalindrome(121) -> True
isPalindrome(-121) -> False
假设
输入为整数
tips
你能想到不将整数转换为字符串的方法吗
利用除法和取模运算
'''
from functools import reduce
def isPalindrome(x):
# 个位直接返回True
if 0 <= x < 10:
return True
# 负数为False
if x < 0:
return False
alist = []
orig_x = x
while x > 0:
alist.append(x % 10)
x //= 10
# print(alist)
rev_x = reduce(lambda x, y: x * 10 + y, alist)
print(orig_x, rev_x)
if orig_x == rev_x:
return True
else:
return False
# pass
print(isPalindrome(1))
print(isPalindrome(121))
print(isPalindrome(-121))
网站答案
解法
def isPalindrome(x):
if x<0 or (x%10 == 0 and x != 0):
return False
origin = x
revertedNumber = 0
while x > 0:
revertedNumber = revertedNumber*10 + x%10
x //= 10
return origin == revertedNumber
性能:
时间复杂度O(logn)
空间复杂度O(1)