都是对折法
首先对特殊情况进行判断,小于零或者整除10,这是比较好判断的。
另,对原数和临时数的位数进行判断可以少执行一次循环,节省时间。
1
class Solution {
public:
bool isPalindrome(int x) {
if(x<0 || x>0 && x%10==0)
return false;
double x_1=0;
while(x>10)
{
x_1=x_1*10+x%10;
x/=10;
if(x/10==x_1)
return true;
else if(x/10<x_1)
{
if(x==x_1)
return true;
else return false;
}
}
return true;
}
};
用时 54% 内存100%
把return里的语句拿出来单独进行判断,发现内存的消耗减少了,但是消耗的时间增加了。
2
class Solution {
public:
bool isPalindrome(int x) {
if(x<0 || x>0 && x%10==0)
return false;
double x_1=0;
while(x>10)
{
x_1=x_1*10+x%10;
x/=10;
if(x/10==x_1)
return true;
else if(x/10<x_1)
return x==x_1;
}
return true;
}
};
用时 79% 内存 74%
猜测是因为把语句放在return里多创建了一段空间。
3
class Solution {
public:
bool isPalindrome(int x) {
if(x<0)
return false;
double x_1=0,y=x;
while(x>0)
{
x_1=x_1*10+x%10;
x/=10;
}
return x_1==y;
}
};
用时 79% 内存 54%
把每个单独的数拿出来进行判断。