原题地址:https://leetcode.com/problems/palindrome-number/
原题题意:Determine whether an integer is a palindrome. Do this without extra space.
解析:此题可以借用前面的题目:求回文串 的思路
将一个int 转化为string,进而就变成了求回文串的 题目。
class Solution {
public:
bool isPalindrome(int x) {
if(x<0) return false;
string s;
while(x){
s.push_back(x%10);
x/=10;
}
int len = s.length();
int i,j;
for(i = 0,j = len-1;i<=j;++i,--j){
if(s[i]!=s[j]){
return false;
}
}
return true;
}
};
2.但是此处不符合题意,题目中说明:不能使用额外的空间。那么我们就举个例子来找找思路
比如: 13431 1331
我们发现 不管从左往右还是从右往左读都是一样的
因此我们可以求出该数的位数div,借用位数直接取出最高位和最低位进行比对。
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) return false;
int div = 1;
while (x / div >= 10) {
div *= 10; //div表示位数
}
while (x != 0) {
int l = x / div;
int r = x % 10;
if (l != r) return false;
x = (x % div) / 10;//关键步骤 13431===> 343
div /= 100;
}
return true;
}
};