题意分析:

  • 在不使用额外的内存空间的条件下判断一个整数是否是回文数字
  • 如果使用NC57反转数字 的思路,注意溢出的处理
  • 考虑负数的特判

解法一:数学

图片说明

  • 一个直观的算法,就是将所给数字反转之后与原来的数字进行比较,如果相等怎么时回文数(当然要考虑负数的情况)
  • 关于如何反转一个数字串,请参考NC57反转数字

C++参考代码:

class Solution {
public:
    int reverse(int x){
        //用long的原因是避免溢出
        long res = 0;
         //注意细节:这里的终止条件不能是x>0
        while(x!=0){
            //将得到的每一位数字拼成完整的数值
            res = res*10+x%10;
            //获取下一位
            x/=10;
        }
        //对数值范围可能溢出的考虑,利用了自带的INT_MAX与INT_MIN简化判断
        if(res>INT_MAX || res<INT_MIN){
            return 0;
        }else{
            return res;
        }
    }
public:
    /**
     * 
     * @param x int整型 
     * @return bool布尔型
     */
    bool isPalindrome(int x) {
        //特判:排除负数情况