public class Solution {
public boolean isPalindrome(int x) {
//negative numbers are not palindrome
if (x < 0)
return false;
// initialize how many zeros
int div = 1;
while (x / div >= 10) {
div *= 10;
}
while (x != 0) {
int left = x / div;
int right = x % 10;
if (left != right)
return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
}
此代码高明之处在于每次比较最高位和最低位,然后去掉最高位和最低位,接着再比较最高位和最低位,以此类推,直到出现最高位和最低位不相等,即返回false
例如 123321,
先计算div,循环之后div为10000,(div始终是原数据的最高位不变,其他位变为0)
最高位计算:x/div
最低位计算:x%10
去掉最高位:x%div
去掉最低位:(x%div)/10