思路:首先将这个数复制一份,先找到这个数的位数,比如有六位,就构造100000这个数,用这个数除100000,就得到了最大的位数。 然后用里一个模10,这样就得到了最低位的数,然后循环比较这两个数是否相等就可以了。循环结束的条件是剩余的两个数是否相等。 举个例子: 12321-->1232->123->12->1 12321-->2321->321->21->1 这样就可以判断出来,但是时间复杂度是O(1)
int isPalindrome(int x)
{
if(x < 0)
return 0;
int temp = x;
int i = 1;
int high = 0;
int low = 0;
while(temp/10 != 0)
{
i *= 10;
temp /= 10;
}
temp = x;
do{
high = temp / i;
low = x % 10;
if(high != low)
return 0;
temp -= (high * i);
i /= 10;
x /= 10;
}
while(temp != x);
return 1;
}
一个更好的方法的思路是:定义一个新的变量,将形参的头部复制到新的变量的尾部,当新变量大于等于形参的时候,比较两个变量的,如果相等,则为回文
class Solution {
public:
bool isPalindrome(int x) {
if(x<0|| (x!=0 &&x%10==0)) return false;
int sum=0;
while(x>sum)
{
sum = sum*10+x%10;
x = x/10;
}
return (x==sum)||(x==sum/10);
}
};