题目大意:判断一个数字是不是回文数字
分析:负数不能是回文数,直接返回false即可。题目要求不占用其他空间,所以方法一不太好。
代码:
方法一:将x存进数组判断高低位。(自己的思路)
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
int count = 0;
vector<int> num;
while (x != 0) {
int temp = x % 10;
count++;
num.push_back(temp);
x /= 10;
}
for (int i = 0;i < count / 2;i++) {
if (num[i] != num[count - i - 1]) {
return false;
}
}
return true;
}
};
上面的方法占用了多余空间,下面有一种改进方法:
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
int div = 1;
while (x / div >= 10) {
div *= 10;
}
while (x != 0) { //注意这个条件是x!=0
int l = x / div;
int r = x % 10;
if (l != r) return false;
x = (x % div) / 10;
div /= 100;
}
return true;
}
};
方法二:转载自https://blog.csdn.net/zhangxiao93/article/details/48751493
class Solution {
public:
bool isPalindrome(int x) {
if (x<0)
return false;
long long int sum =0;
long long int origin = x;
while(x){ //将数字逆转判断是否跟原数相同(逆转方法:从低位开始每位都×10再加上一位)
int num = x % 10;
sum = sum*10 + num;
x/=10;
}
if(sum == origin)
return true;
else
return false;
}
};