问题
Determine whether an integer is a palindrome. Do this without extra space.
代码
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0) {
return false;
}
long long div =1;
long long x_back = x;
while (x_back / div >= 1) {
div *=10;
}
div/=10;
//cout<<"div:"<<div<<endl;
while (div > 1) {
if ((x/div)%10 != x_back % 10) {
return false;
}
div/=10;
x_back /= 10;
//cout<<"div: "<<div<<endl;
//cout<<"x back : "<<x_back<<endl;
}
return true;
}
};
分析
首先得找到x的位数,比如123,找到100,然后依次除以100%10 , 除以 10%10 就可以很方便的从高位取到低位,同样低位到高位则是 x/=10; x%10 ,依次这样两个来回对比就完了。
其实有个办法优化最后一个循环,到1/2 (logN),最后还是O(logn) , 感觉没他大关系,所以我就算了. 现在时间复杂度是 O(logN).
总结
数字题目,没有难度,只是基础罢了。