题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例
示例1
输入: 121
输出: true
示例2
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例3
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
分析
方法1
将整数转为字符串,将字符串前后两端的字符逐个比较,不相等就立刻返回false,直到字符串遍历完,返回true
方法2
不将整数转为字符串,这时就需要自己写一个将原来的数字逆置的算法。比如原数字123,逆置后321,比较一下,不相等,所以123不是回文数。
逆置整数的方法:
while(x != 0) {
y = y*10 + x%10;
x /= 10;
}
要注意的是,在这个题中,需要将 x 的值备份一下,否则逆置后的数字是和0 比较的;还有,数字 -121 逆置后还是 -121 ,但根据题意,它不是回文数,所以程序开始时要判断整数是否为负,是负数返回 false。
代码
方法1
class Solution {
public boolean isPalindrome(int x) {
String s = String.valueOf(x);
for(int i = 0, j = s.length()-1; i < j; i++, j--) {
if(s.charAt(i) != s.charAt(j))
return false;
}
return true;
}
}
方法2
class Solution {
public boolean isPalindrome(int x) {
if(x < 0)
return false;
int y = 0, t = x;
while(t != 0) {
y = y*10 + t%10;
t /= 10;
}
if(x == y)
return true;
return false;
}
}