下面是解决这个回文数问题的一个Java解法:
代码解释
- 特殊情况处理 :
- 如果数字是负数,直接返回
false
,因为负数不可能是回文数。 - 如果数字以0结尾,但不是0本身,也不可能是回文数(例如10不是回文数)。
- 如果数字是负数,直接返回
- 核心逻辑 :
- 利用反转数字的一半来判断是否是回文数。
- 每次取x的最后一位数字,将其添加到反转的数字
revertedNumber
中。 - 同时将x缩小为去掉最后一位后的数字。
- 当原始数字
x
小于或等于revertedNumber
时,说明已经处理了一半或更多。
- 回文判断 :
- 如果数字的长度是偶数,
x
应该等于revertedNumber
。 - 如果数字的长度是奇数,
x
应该等于revertedNumber / 10
(因为反转数字会多一位)。
- 如果数字的长度是偶数,
示例
-
输入:
x = 121
输出:
true
-
输入:
x = -121
输出:
false
-
输入:
x = 10
输出:
false
这个解法的时间复杂度是O(log10(n)),空间复杂度是O(1)。
java
class Solution {
public boolean isPalindrome(int x) {
//首先处理特殊情况,负数和以0结尾的非0元素必然不是回文数
if(x < 0 || (x % 10 == 0 && x != 0)) return false;
//然后将该数字反转
int revertedNum = 0;
while(x > revertedNum) {
revertedNum = revertedNum * 10 + x % 10;
x /= 10;
}
return (x == revertedNum || x == revertedNum / 10);
}
}