题目
Determine whether an integer is a palindrome. Do this without extra space.
Some hints:Could negative integers be palindromes? (ie, -1)
If you are thinking of converting the integer to string, note the restriction of using extra space.
You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?
思路
题目要求不可以使用额外的存储空间,一般来说需要利用递归实现。注意提示:负数不是回文数,如果将整型数转换为字符串,注意这用到了额外的存储空间,如果试着翻转一个整型数,则会遇到翻转后可能溢出的问题。笔者使用判断高位和低位是否相等的方法,只需要定义一个计数变量即可实现,没有占用额外的存储空间。另外尽量使用for循环代替while循环,因为运行时间相对短一些。
代码
Python
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if (x < 0) | (x == 0x7FFFFFFF):
return False
i = 1
temp = x/10
while(temp > 0):
temp /= 10
i += 1
#知道数有多少位后,循环判断最高位是否等于最低位
for i in range(i-1,0,-2):
base = pow(10,i)
if(x/base == x%10):
x = (x%base)/10
continue
else:
return False
return True
Java
public class Solution {
public boolean isPalindrome(int x) {
int i,base;
if(x < 0 || x == 0x7FFFFFFF) return false;
//先看看数有多少位;
for(i = 1;x/(int)Math.pow(10, i) > 0;i++);
for(i--;i>0;i -= 2){
base = (int)Math.pow(10, i);
if(x/base == x%10){
//最高位跟最高位相等,则去掉最高位和最低位并进行下次循环;
x = (x%base)/10;
continue;
}
else return false;
}
return true;
}
}