题目要求
Determine whether an integer is a palindrome. Do this without extra space.
题目翻译:判断一个Integer是否是回文数字。程序不开辟额外的空间。
题目分析
最开始的思路是把比较数字的第一位和最后一位,并截断第一位和最后一位。比如:数字是12321,比较首尾,然后截断,得到232,依次比较。然而出现了一个问题:当输入带有0时,比如1000021时,截断会发生遗漏,比如截断1000021首尾,我们期望得到00002,结果得到的是2,因此出现错误的结果。
调整的思路是取出首尾位,不截断。假设输入123321,比较2的时候,高位的2是这样得来的:(123321/10000)%10 ;低位的2是这样得来的:(123321%100)/10
泛化的情况如下:
len = 数字位数-1; // 比如12321,len=4
first = (x / (int)Math.pow(10, i)) % 10;
last = (x % (int)Math.pow(10, len+1-i)) / ((int)Math.pow(10, len-i));
实现代码
package com.linsiyue;
public class Solution {
public boolean isPalindrome(int x) {
if (x<0) return false;
if (x<10) return true;
long n = 1;
int first = -1, last = -1, len = 0;
while (x >= n){
n = n*10;
len++;
}
len--;
for (int i = len; i > len/2; i--) {
first = (x / (int)Math.pow(10, i)) % 10;
last = (x % (int)Math.pow(10, len+1-i)) / ((int)Math.pow(10, len-i));
if (first != last) return false;
}
return true;
}
}