题目
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
解题思路
反转数字:首先想到方法是反转所有的数字,然后对比反转后的值与原值是否相等,相等则是回文数,不需要考虑int类型溢出问题,因为若是溢出,则肯定不是回文数。
反转一半数字:看到LeetCode更优解法,反转一半数字。
1、负数不是回文数
2、高位数字不可能为0,故数字个位上‘0’的数字不是回文数
3、数字个数偶数:例如,2552,可以将数字 2552 的后半部分从 52 反转为 25,并将其与前半部分 25 进行比较,二者相同,数字 2552 是回文。
4、数字个数奇数:例如,25152,可以将数字 25152 的后半部分从52 反转为 25,并将其与前半部分 251 / 10 进行比较,二者相同,数字 25152 是回文。
下面代码就是反转一半数字的Java代码。
Java代码
public boolean isPalindrome(int x) {
if (x < 0 || (x % 10 == 0 && x != 0)) return false;
int res = 0;
while (x > res) {
res = res * 10 + x % 10;
x = x / 10;
}
return res == x || res / 10 == x;
}
类似题目:整数反转