1 题目描述
给你一个整数 x
, 如果 x
是一个回文整数, 返回 true
;否则, 返回 false
.
回文数是指正序 (从左向右) 和倒序 (从右向左) 读都是一样的整数.
例如, 121
是回文, 而 123
不是
2 测试用例
**示例 1: **
输入:x = 121
输出:true
**示例 2: **
输入:x = -121
输出:false
**解释: ** 从左向右读, 为-121. 从右向左读, 为 121-. 因此它不是一个回文数
**示例 3: **
输入:x = 10
输出:false
**解释: ** 从右向左读, 为 01. 因此它不是一个回文数
3 解题思路
- 判断入参是否为负数, 负数不是回文数
- 定义变量
res
存储反转后的结果, 遍历入参取出最后一位int temp = x % 10
, 然后把res = res * 10 + temp
- 对比原始数据是否等于反转后的数据, 来判断是否为回文数
3.1 解法 1:
public boolean isPalindrome(int x) {
// 负数不是回文数
if (x < 0) {
return false;
}
// 将原始数 x 保存到 data 中
int data = x;
// 反转后的数
int res = 0;
while (x > 0) {
// 取出最后一位
int temp = x % 10;
if (res > Integer.MAX_VALUE || (res == Integer.MAX_VALUE && temp > 7)) {
return false;
}
// 将最后一位放到最前面, 例如: 123 -> 321
res = res * 10 + temp;
// 去掉最后一位
x /= 10;
}
// 如果反转后的数和原始数相等,则说明是回文数
return res == data;
}