Determine whether an integer is a palindrome. Do this without extra space.
题目分析:判断输入的一个整数数是否是回文数。不能使用额外空间。
**官方提示:**1、负数没有回文数2、若你想转化为字符串做题,你要考虑到不能用额外空间的限制。3、你也可以反转整数来操作,但要注意翻转后可能会溢出5、0结尾的都不是回文数
方法一:
- 思路:判断输入的数是否大于0,如果不是,直接返回false。否则继续用切片[::-1]输出倒序并判断是否和输入的数一直。如果一直,返回true,否则返回false。
- 缺点:使用了额外空间,不合要求。 优点:简单。
- 代码:(此代码提交不通过,原因↑)
class Solution(object):
def isPalindrome(self, x):
if x>0:
if str(x)==str(x)[::-1]:
return print("true")
else:return print("false")
else:return print("false")
a=Solution()
a.isPalindrome(int(input()))
方法二:
- 思路:读过官方提示后,我想到了另一种方式,比较头尾是否相等再逐渐往中间推进。
- 优点:符合要求。 缺点:代码量大,且分情况多,要判断奇偶。
- 代码:(可以通过提交)
- 因为比较麻烦,代码就不贴了(主要是我写了半天,一直没有对O(∩_∩)O),如果哪个大神做对了,希望可以指导指导我。
方法三:
1. 思路:承袭第一种方法的思路。任然反转后判断,但是不改成字符串格式(防止了使用到额外空间)。
2. 优点:代码简单,可以通过。 缺点:不太好理解,所以还是背下来反转用的公式的好。
3. 代码(可以通过提交)
class Solution(object):
def isPalindrome(self, x):
if x < 0:
return False
tmp = x
y = 0
while tmp>0:
y = y*10 + tmp%10
tmp = tmp//10 #这两行理解不了就背下来
return y == x