题目描述
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例
输入: 121
输出: true
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解题思路
- 考虑反转数字的一半,如果该数字是回文,则其后半部分反转肯定与原始数字的前半部分数字相同。
- 如何判断已经反转了数字的一半?如果已经反转的数字大于等于原始数字的时候,就意味着反转了一半的数字。
代码
public boolean isPalindrome(int x) {
// 负数肯定不是回文
// 如果最低位为0 , 除了数字0之外,其他的肯定也不是回文
if (x < 0 || (x != 0 && x % 10 == 0)) {
return false;
}
int revertNum = 0;
while (revertNum < x) {
revertNum = x % 10 + revertNum * 10;
x = x / 10;
}
// 当数字长度为奇数的时候, 可以通过revertNum / 10来去除中位的数字,因为中位的数字不影响回文的比较。
return x == revertNum || x == revertNum / 10;
}
网友评论