受到上个题的启发,先把int reverse了 然后判断是否和原来的数字相等。
这样做的话average case时间复杂度高
看到了别人的解法是用两个指针,只要判断到一位不想等就返回,平均复杂度低一些,但是怎么用指针不好想。他实际上指针就是这一位的base 比如10,100,1000 然后用x分别除以左右两个对应的指针 再去余 实际上就是取了这个位置的数字。
我的代码
public class Solution {
public boolean isPalindrome(int x) {
int ans = x;
int res = 0;
while ( ans > 0){
res = (res * 10) + ans % 10;
ans = ans / 10;
}
boolean pa = false;
if ( res == x)
pa = true;
return pa;
}
}
指针代码 两种
public boolean isPalindrome(int x) {
if(x<0)
return false;
int div = 1;
while(div<=x/10)
div *= 10;
while(x>0)
{
if(x/div!=x%10)
return false;
x = (x%div)/10;
div /= 100;
}
return true;
}
bool isPalindrome(int x) {
if (x < 0) return false;
int left = pow(10, floor(log10(x)));
int right = 1;
while (right < left) {
if ((x / left - x / right) % 10 != 0) {
return false;
}
right *= 10;
left /= 10;
}
return true;
}