题意思路:
判断一个整数是否是回文,回文指若将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; } };