题意思路:

判断一个整数是否是回文,回文指若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。

方法一:转换为数字

可以将数字从最低位向最高位枚举得到逆序数字,比较是否相同,若相同则是回文数,若不相同则不是回文数。

复杂度分析:

时间复杂度:O(m),m为数字长度,遍历数字各位的数字。

空间复杂度:O(1);数组存储与读取数据

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0)return false;//特判,若数字为负数则不是回文数字
        int integer=x,y=0;
        while(integer){//若数字为0则退出循环
            y=y*10+integer%10;//得到逆序数字
            integer/=10;//每次去掉最低位
        }
        return x==y;//比较是否是回文数

    }
};

方法二:通过双指针枚举

将x通过两个指针i,j分别从枚举第一个数字和最后一个数字比较是否相同。

若不相同则返回false并输出。

若相同则则i指针向右移动i++,j指针向左移动j--

若直到指针i>=j则数字都相同此时该数字为回文数字。

复杂度分析:

时间复杂度:O(m),m为数字长度,遍历数字各位的数字。

空间复杂度:O(m);将数字转换为字符串

下图演示了双指针算法过程:
图片说明

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0)return false;//特判,若数字为负数则不是回文数字
       string s=to_string(x);//将数字转换为字符串
        for(int i=0,j=s.size()-1;i<j;i++,j--){//两个指针i,j分别从枚举第一个数字和最后一个数字比较是否相同
            if(s[i]!=s[j])return false;//若不相同则为false
        }
        return true;
    }
};