我们只进行一半的反转
用revertednumber保存反转的数字
两种情况:
- 奇数:有一个中位数。假如有5位数字12321我们就运算3次(n/2+1次),让revertednumber=123,而x此时=12
- 偶数:假如6位数字123321刚好得到了revertednumber = 123 此时x=123
class Solution {
public:
bool isPalindrome(int x) {
//x<0不是回文数
// 最后一位是0,第一位也必须是0
if(x<0 || (x%10==0 && x!=0)){
return false;
}
int revertedNumber = 0;
while(x > revertedNumber){
// 如果是偶数执行n/2次,奇数n/2+1次
// 123321 1234321
// x 123 123
// revertedNumber 123 1234
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
return x == revertedNumber || x==revertedNumber/10;
}
};
时间复杂度O(lon2 n)
空间复杂度O(1)