给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
程序说明:
法一:StringBuffer类的reverse()方法
法二:数学处理,但是注意会溢出
法三:进一步优化,只转换x的后一半,与x的前一半比较,避免溢出。
参考链接:回文数
代码如下:
class Solution {
public boolean isPalindrome(int x) {
//x是负数时,x不为回文数
if(x < 0) return false;
long sum = 0, tmp = x;
while(x > 0) {
sum = sum * 10 + x % 10;
x /= 10;
}
return sum == tmp;
}
}
//优化版
class Solution {
public boolean isPalindrome(int x) {
//当x的个位为0,且x不为0时,x不是回文数
if(x != 0 && x % 10 == 0 || x < 0) return false;
int sum = 0;
while(x > sum) { //sum小于x,即后一半小于前一半
sum = sum * 10 + x % 10;
x /= 10;
}
return sum == x || sum / 10 == x; //x位数为奇数,偶数,分两种情况
}
}