题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
输入: 121
输出: true
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
第一种方法:暴力方法,反转的做法
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x>0:
res = 0
t =x
while t:
res = res*10+t%10
t = t//10
if res==x:
return True
else:
return False
elif x<0:
return False
else:
return True
第二种方法:优化/反转一半数据
按照第二个想法,为了避免数字反转可能导致的溢出问题,为什么不考虑只反转 \text{int}int 数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x<0 or(x%10==0 and x!=0):
return False
elif x>0:
res =0
t=x
while t>res:
res = res*10+t%10
t=t//10
if t==res or t==res//10:
return True
else:
return False
#这个判断语句做优化可以写成 return t==res or t==res//10
else:
return True
- 时间复杂度:
, 对于每次迭代,我们会将输入除以10,因此时间复杂度为
。