题目来源:
题目分析:
本题要我们判断一个整数是否是回文数,Do this without extra space.这句,当时我的理解是说在输入时不要留有空格,因此我写的程序较为简单,没有判断溢出等情况,有大神的理解是说不占用其他空间,因此不能将整数转化为其他形式来进行处理,我下面也会进行相应的讨论。
题目解答:
先附上我写的代码,通过了感觉有点神奇,因为我没有考虑溢出的情况,要是有大神来解释一下不胜感激!!!
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if(x>=0):
if(x==int((str(x))[::-1])):
return True
else:
return False
else:
return False 如果按照不能申请额外空间来做,则可以考虑将int型数据翻转过来,这是要注意不能超过其溢出范围(32位)
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if(x<0):
return False
else:
ans=0
b=x
while(x>=0):
ans=ans*10+x%10
if (ans>2**32/2):
return False
x//=10
if(b==ans):
return True
但是将其写在网页中,貌似不能编译成功,因为时间复杂度过高。上面的代码中需要注意的是在python3中,/表示浮点数除法,返回浮点数结果,//表示整数除法,返回整数结果。
第三种方法有一定的技巧性,思路其实比较容易理解,但就是在写代码的判断条件上需要比较注意,这次碰到了就记住吧,我在写时真的试了很多次!!!!
它的思路在于:如果一个数是回文,那么我们不用将整个数倒序过来和原来的数进行比较,而是可以取它的后一半与它的前一半来进行比较,这里就需要注意到数字个数的奇偶问题了,要注意条件的判断,如果是一致的,则是回文,如果不一致,则不是回文。这种方法可以通过编译。但是这种方法最需要注意的是需要将(x%10==0 and x!=0)这种情况单独挑出来做判断,不然就会出错,切记切记!下面,附代码:
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if(x<0 or (x%10==0 and x!=0)):
return False
else:
ans=0
while(x>=ans):
ans=ans*10+x%10
if(ans>(2**32/2-1)):
return False
x //= 10
if(x==ans or x==(ans//10)):#需要考虑到回文是奇数的情况
return True
else:
return False
以上还有一个知识点需要注意:我们观察到最后一个else没有相应的if与之对应,这是怎么回事呢?原来,在python中,else不仅可以与if搭配,还可以和while搭配,同样还可以与try语句搭配(可省),当try语句出现异常,则进入except语句,否则执行else语句。可见文:
本文探讨了LeetCode上的回文数判断问题,提供了三种不同的解决方案,并深入分析了每种方法的特点及注意事项。

5990

被折叠的 条评论
为什么被折叠?



