题目
Determine whether an integer is a palindrome. Do this without extra space.
思路
1 题目不算难,方法有很多,但是要考虑极限情况,就可能会把很多方法给撇除了。
2 首先考虑负数的话 ,返回false;这样就可以单独拿出来作判断。
3 考虑如果把数字颠倒过来来和原来的比较。可是颠倒过来有可能溢出,所以用字符串的方式颠倒也不成立。
4 考虑把每个数字都记录下来,然后对比;不满足题意(不能用额外空间)
5 最后留下来的就是利用数字本身的性质一步步来做。余数,除数的理解基础扎实即可。
代码
public class Solution {
public boolean isPalindrome(int x) {
if(x<0){
return false;
}
int cur =x;
int divisor =1;
while(cur/divisor>=10){
divisor*=10;
}
cur =x;
while(divisor>=10){
int low = cur%10;
int high = cur/divisor;
if(low!=high){
return false;
}
cur = (cur%divisor)/10;
divisor /=100;
}
return true;
}
}
2015.3.16总结二
再第二次刷的时候,有卡壳的地方,在于确定divisor为多少。
一开始肯定设置divisor 为1。x/divisor为多少的时候继续呢?5,9 碰到1 就停止。 10/1继续,然后10/10就停止了,直到99也是/10停止。碰到100/10必须继续,它的极限为>=10。
如果设定不合理,容易出现Divisor溢出的情况。如下代码:
long Div = 10;
while(x/Div>0){
Div*=10;
}
int maxDiv=(int)(Div/10);