解析:一开始我想直接把数字反转过来,然后与原数做比较。但是提交后发现反转后会有溢出现象,然后我就放弃该做法改用数组存储了。但后来发现,如果是回文数,反转后一定不会溢出,因为等于原数。所以如果溢出,则一定不是回文数。
方法一:反转
Java和C++一样:
class Solution {
public boolean isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0)) return false;//判断显而易见的数:负数或者最低位为0的数
int start=x,end=0,temp,i=0;
while(x!=0){
temp=x%10;
x=x/10;
if(end>214748364||(end==214748364&&temp>7)){//判断是否溢出
return false;
}
end=end*10+temp;
}
if(end==start) return true;
else return false;
}
}
方法二:数组存储每一位数字,然后判断第一位和最后一位,依次类推。
Java:
class Solution {
public boolean isPalindrome(int x) {
if(x<0) return false;
int s[]=new int[100];
int start=x,end=0,temp,i=0;
while(x!=0){
s[i]=x%10;
x=x/10;
i++;
// end=end*10+temp;
}
int len=i;
for(int j=0;j<len/2;j++){
if(s[j]!=s[--i]) return false;
}
return true;
}
}
//C++:
class Solution {
public:
bool isPalindrome(int x) {
if(x<0) return false;
int s[100];
int start=x,end=0,temp,i=0;
while(x!=0){
s[i]=x%10;
x=x/10;
i++;
}
int len=i;
for(int j=0;j<len/2;j++){
if(s[j]!=s[--i]) return false;
}
return true;
}
};