9.回文数 Palindrome Number (Easy)
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
进阶:
你能不将整数转为字符串来解决这个问题吗?
解题思路
不使用字符串来判断,也就是不使用额外的空间。
可以将原整数翻转,看反转后的整数是否和原来整数相等。
我第一次提交的代码:
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
y=x
reverse=0
while y:
reverse=reverse*10+y%10
y=y//10
return x==reverse
执行时,显示超出时间限制,看官方题解,可能是数字反转可能导致的溢出问题,但是又看其他人说,因为 Python 语言本身的特性,这里反转整数时不需要考虑溢出,那我用的python为啥不行呢,求大神解释啊~~~~
为了避免数字反转可能导致的溢出问题,考虑只反转数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。
第二次提交的代码
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
#负数时,一定不是回文
if x<0:
return False
reverse=0
while x>reverse:
reverse=reverse*10+x%10
x=x//10
return x==reverse or reverse//10==x
提交有错,对这种非零但是以0结尾的数字,判断错误,再在if里加上这个条件,第三次提交。
扫描二维码关注公众号,回复:
5066719 查看本文章
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
#负数时,一定不是回文,结尾为0时,不是回文
if x<0 or (x!=0 and x%10==0):
return False
reverse=0
while x>reverse:
reverse=reverse*10+x%10
x=x//10
return x==reverse or reverse//10==x
终于通过了!
github
链接: https://github.com/seattlegirl/leetcode/blob/master/palindrome-number.py.