题目:判断一个整数是否是回文数。回文数是指正序和倒序读都是一样的整数。
例:121->True -121->False 10->False
题解:
一、反转字符串
class Solution(object):def isPalindrome(self, x):return str(x)==str(x)[::-1]作者:wang_ni_ma链接:https://leetcode-cn.com/problems/palindrome-number/solution/chao-xiang-xi-tu-jie-san-chong-jie-fa-9-hui-wen-sh/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
知识点:
字符串反转和等间隔抽取
x='1234321'
与list反转一样,当作list处理即可,没什么好多说的。
例:列
x[::-1]='1234321'x[::-2]='1331'
注:列表反转本质上仍然是从list中按固定间隔抽取,只是起始位置和步长都设为-1所以反着取
例:倒序取值
x[1::-1]='21'x[0::-1]='1'
例:对某个索引之后的切片进行倒序取值
x[:pivot:step]
x[:0:-1]='123432'x[:0:-2]='133'x[:0:-3]='14'x[:1:-1]='12343'
**
二、求模法
class Solution(object):def isPalindrome(self, x):if x<0:return Falseans = 0old = xwhile x>0:tmp = x%10ans = ans*10 + tmpx //= 10return ans==old作者:wang_ni_ma链接:https://leetcode-cn.com/problems/palindrome-number/solution/chao-xiang-xi-tu-jie-san-chong-jie-fa-9-hui-wen-sh/来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
知识点:
栈
上述过程等价于数字依次从栈1234321中弹出,再放入一个新栈中,实现了反转的效果。
三、优化解
class Solution(object):
def isPalindrome(self, x):
if x<0 or (x%10==0 and x!=0):
return False
ans = 0
while x>ans:
ans = ans*10 + x%10
x //= 10
return x==ans or x==(ans//10)
作者:wang_ni_ma
链接:https://leetcode-cn.com/problems/palindrome-number/solution/chao-xiang-xi-tu-jie-san-chong-jie-fa-9-hui-wen-sh/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
比较巧妙的解法,利用了回文的对称性,即首尾两半正好相反。但是需要区分数字长度为奇偶的情况:
return x==ans对应长度为偶数 return x==(ans//10)对应长度为奇数。
这种思路发现了数据中更强的属性,虽然需要分类讨论以及考虑边界条件,但也值得学习。
