1、题目

2、解法
class Solution {
public boolean isPalindrome(int x) {
// 整数如果是负数或者末尾为0得数,返回false
if (x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int ret = 0;
// 正:/10, 反:*10
while (x > ret) {
ret = ret * 10 + x % 10;
x = x / 10;
}
// 如果是奇数,那么 ret肯定比x多1位
return x == ret || x == ret / 10;
}
}
时间复杂度O(log10^n) —因为每次都要除以10(n/10^c) = 1 ,空间复杂度O(1)
3、思考
@1:要学会考虑不同情况:
- 确定整数是不是回文数,只要判断正、反读是否相等;
- 这里只考虑整数本身,所以分为正、末尾为0的正、负、0考虑;
- 正好判断整数的一半是否相等可以解决这个问题,所以归功于/10、*10。
本文介绍了一种判断整数是否为回文数的高效算法,通过正反读对比,仅需处理一半数字即可得出结论。算法时间复杂度为O(log10^n),空间复杂度为O(1)。
668

被折叠的 条评论
为什么被折叠?



