题目大意:给定一个整型(即int),判断其是否为回文数
首先负数肯定不是回文了,只要判断正数就好。
将数字不断%10/10一个个取出来,放到一个数组中。然后再从数组两头开始往中间比较,有不等的马上返回false就好。
public static boolean isPalindrome(int x) {
if(x<0)
return false;
int [] data = new int [13];
int count = 0;
int temp = 0;
while(x>0){
data[count]=x%10;
x/=10;
count++;
}
for(int i=0,j=count-1;i<j;i++,j--){
if(data[i]!=data[j])
return false;
}
return true;
}
改进办法,在做成数组的时候,最后还要从两头往中间遍历,虽然int的位数不长,但是毕竟还是O(n)
所以不用数组了,直接构造从右边开始构造一个数,然后直接比较就好了。
bool isPalindrome(int x) {
// 负数肯定不为回文数
if (x < 0) return false;
// 将其反过来存放
long y = 0, z = x;
while (x > 0) { y = y * 10 + x % 10; x = x / 10; }
// 返回判断结果
return y == z;
}