题目:
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
思路:
求数字x倒置之后的值reverse_x。如果x==reverse_x,则true;否则为false。
代码实现:
class Solution {
public:
bool isPalindrome(int x) {
int orgin = x;
if (x < 0){
return false;
}
long long sum = 0;
while (x){
sum *= 10;
sum += x % 10;
if (sum > INT_MAX){
return false;
}
x /= 10;
}
if (sum == orgin){
return true;
}else{
return false;
}
return true;
}
};
discuss:
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x != 0 && x % 10 == 0)){ // 负数或者尾部带0的数都一定不是回文数
return false;
}
long sum = 0;
while (x > sum){ // 实际上比较一半就可以了。比如x=12344321,如果比较到一半,x为1234,sum也为1234(从4321转换过来的),然后直接比较一下是否相等即可。另一种情况,比如x为1234321,如果比较到一半,x为123,sum为1234,将sum最后一个数字去掉即可(最后一个数字是回文数的中心点)
sum = sum * 10 + x %10; // sum逐渐增大
x /= 10; // x逐渐减小
}
return (x == sum) || (x == sum/10);
}
};