判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
思路1
python提供的切片器使得字符串反转相当容易,因此这种代码精简,但不是最优的
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if str(x)==str(x)[::-1]:
return True
else:
return False
执行用时 :56 ms, 在所有 python 提交中击败了79.38%的用户
内存消耗 :11.9 MB, 在所有 python 提交中击败了5.15%的用户
思路二
如果不用反转字符串,其实很容易想到用类似求数字各位和的算数方法。但实际写出来,提交之后发现速度不如字符串的快,于是看了一下社区的小伙伴的对此方法的改进算法,感觉非常的巧妙。
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x < 0 or(x%10==0 and x!=0):
return False
ans=0
while x>ans:
ans=ans*10+x%10
x=x//10
return True if ans==x or (ans//10)==x else False
执行用时 :44 ms, 在所有 python 提交中击败了96.46%的用户
内存消耗 :11.8 MB, 在所有 python 提交中击败了17.37%的用户
优化思路是,因为是判断回文数,所以不需要完全计算反转数再比较,只需要比较前一半和后一半的反转是否相同即可。如果数的位数是奇数,需要把后一半反转的末尾数字去掉再比较。真是巧妙的优化方案!
小总结
python字符串反转极其简单
return True if ans==x or (ans//10)==x else False
比分开写条件语句快得多