Skip to content

Latest commit

 

History

History
53 lines (52 loc) · 1.45 KB

9.md

File metadata and controls

53 lines (52 loc) · 1.45 KB

9. Palindrome Number

题目链接

思路:首先将这个数复制一份,先找到这个数的位数,比如有六位,就构造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);
    }
};