(9)Palindrome Number
题目:判断一个整数是否是回文数字,不要开额外的空间。
由于前面做的几道题的思维惯性,如果将第一个数字直接模10,加到第二个整数上,然后对这个整数乘10再加刚才数字除以10后的数字再模10,再加到第二个整数上,如此循环,就相当于把数字倒了过来,在判断两个数字是否相同即可,另外,负数不是回文数字,下面是代码:
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0){
return false;
}
int i, temp1 = x, temp2 = 0;
while(x!=0){
temp2 = temp2 * 10;
temp2 += x % 10;
x = x / 10;
}
if(temp1 == temp2){
return true;
}
else{
return false;
}
}
};
虽然这段代码AC了,但是题目最后有一句话叫不要开额外的空间,那么使用了另一个数字来存储翻转后的数字应该是不允许的,那么我们可以考虑每一位进行对比,将数字的第一位和最后一位对比,然后不断向中间查找,下面是代码:
class Solution {
public:
bool isPalindrome(int x) {
if(x < 0){
return false;
}
int len = 1;
while (x / len >= 10){
len = len * 10;
}
while(x > 0){
int lef, rig;
lef = x / len;
rig = x % 10;
if(lef == rig){
x = x % len;
x = x/10;
len = len / 100;
continue;
}
else{
return false;
}
}
return true;
}
};