题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例1
输入: 121
输出: true
示例2
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
思路:
方案1:将目标整数转化为字符串的形式,用类似判断回文序列的方式进行判断。代码如下:
public boolean isPalindrome(int x) {
String xstr=x+"";
char[] xarr=xstr.toCharArray();
int begin=0;
int end=xstr.length()-1;
while (begin<end) {
if (xarr[begin]!=xarr[end]) {
return false;
}
begin++;
end--;
}
return true;
}
方案2:将整数进行反转,然后将对比反转后的整数,判断是否相等。但是我们都知道int型的数据的范围是-2147483648~2147483647,如果目标整数为2147483647,那么反转之后会溢出。为了避免数字反转导致的溢出,我们可以反转数字的一半,然后对比另一半看是否相等。如何判断反转了一半??设反转一半的数为reverseNum,目标数字为x,当reverseNum小于x时,我们认为数字已经反转了一半,考虑到位数可能是奇数位或偶数位
当位数为偶数位时,例如:1221,我们反转后两位为12,前半部分也为12, 即reverseNum==x。
当位数为奇数位时,例如:1221221,我们反转后四位为1221,前半部分为122,即reverseNum/10==x。
代码如下:
public static boolean isPalindrome(int x) {
if(x<0||(x%10==0&&x!=0))
return false;
int reverseNum=0;
while (x>reverseNum) {
reverseNum=reverseNum*10+x%10;
x=x/10;
}
return x==reverseNum||x==reverseNum/10;
}