题目描述
在不使用额外的内存空间的条件下判断一个整数是否是回文
示例:输入:121
输出:true
注意:
1.如果将整数转换为字符串的话要考虑不能使用额外空间。
2.可以将整数翻转,但要考虑是否会出现溢出
方法一:
如果是回文数 若为奇数则中间数字的左边和右边逆序相同,若为偶数则左边一半和右边一半的逆序相同
public class Solution{
public boolean isPalindrome(int x){
if(x<0||x!=0 && x%10==0)
return false;
int reverse=0;
while(x>reverse){
reverse=reverse*10+x%10;
x=x/10;
}
//当数字个数是奇数时,最中间的数会在最后一次循环中给了reverse,所以reverse/10去掉最后一个数
return(reverse==x||reverse/10==x);
}
}
方法二:
迭代比较最高位和最低位,发现不相等就返回false,相等就去掉最高位和最低位继续比较
一个整数的最低位可以使用x%10
一个整数的最高位需要知道最高是哪一位,个,十,百…
int hi=1;
while(x/hi>=10)
hi*=10;
最高位就等于x/hi
public class Solution{
public boolean isPalindrome (int x){
if(x<0)
return false;
int hi=1;
while(x/hi>=10){
hi*=10;
}
while(x!=0){
int left=x/hi;
int right=x%10;
if(left!=right)
return false;
//去掉最高位和最低位
x=(x%hi)/10;
hi=hi/100;
}
}
}