方法一:反转一半数字
    思路

    映入脑海的第一个想法是将数字转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。

    第二个想法是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。
    但是,如果反转后的数字大于 \text{int.MAX}int.MAX,我们将遇到整数溢出问题。

    按照第二个想法,为了避免数字反转可能导致的溢出问题,为什么不考虑只反转 \text{int}int 数字的一半?毕竟,如果该数字是回文,其后半部分反转后应该与原始数字的前半部分相同。

    例如,输入 1221,我们可以将数字 “1221” 的后半部分从 “21” 反转为 “12”,并将其与前半部分 “12” 进行比较,因为二者相同,我们得知数字 1221 是回文。

    1. class Solution {
    2. public boolean isPalindrome(int x) {
    3. //小于0或者不等于0且10的倍数不是回文数
    4. if(x<0||(x!=0&&x%10==0))return false;
    5. int reverseNum =0;
    6. while(x>reverseNum){
    7. reverseNum = reverseNum * 10 + x % 10;
    8. x = x/10;
    9. }
    10. //长度为偶数或者奇数
    11. return x == reverseNum || x == reverseNum /10;
    12. }
    13. }