题目源自于Leetcode。Determine whether an integer is a palindrome. Do this without extra space.
思路:
1、不可以借助辅助空间。即要求空间复杂度为O(1)。如果把int转换为字符串,那么空间复杂度就不符合要求了。
2、注意一下,要考虑到:负数的情况怎么算?
3、如果想要逆转整数,一定要注意防止溢出的问题。
我的解法:
先除10遍历一遍,记住整数的位数。
第二遍然后左端用先除法再求余依次得到高位、右端用先求余再除法依次得到低位,判断是否相等。
#include <cstdio>
#include <iostream>
using namespace std;
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
if(x<10)
return true;
int len = 1;
int n =0;
int a = x;
//这里起初用的是a!=0来作为循环结束的
//但会多出的一次len*10,而这最后一次会导致溢出,即使再/10也晚了。
while(a>9)
{
a = a/10;
len *= 10;
n++;
}
n++;
n /= 2;
a = x;
int b = x;
for(int i=0;i<n;i++)
{
if( ((a/len)%10) != (b%10) )
return false;
len /= 10;
b /= 10;
}
return true;
}
};
int main()
{
int a = 10000001;
Solution s;
bool b = s.isPalindrome(a);
cout<<b<<endl;
return 1;
}