LeetCode刷题之路(9)—— Palindrome Number

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/karry_zzj/article/details/86570031

问题描述

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1: Input: 121 Output: true
Example 2: Input: -121 Output: false
Example 3: Input: 10 Output: false

依题意可知,负数一定不是回文数,且个非零的数的个位为0也一定不是回文数。

方法一:
我们可以将这个数的每位填入一个数组中,然后下标为0与下标为len-1的数比较是否相等,依次比较直到中间位,这是常有思维。

bool isPalindrome(int x) {
    if(x < 0) return false;
        if(x % 10 == 0 && x/10 != 0) return false;
        int a[10];
        int k = 0;
        while(x > 0)
        {
            a[k] = x%10;
            x /= 10;
            k++;
        }
        int ok = 1;
        for(int i=0; i<k/2; i++)
        {
            if(a[i] != a[k-i-1])
            {
                ok = 0;
                break;
            }
        }
        if(ok) return true;
        else return false;
}

方法二:
我们可以将一个数a颠倒其本身得到b,然后将a与b进行比较,但是若a为int类型数据颠倒后的b超过int类型范围,则不能比较,那么我们可以综合以上两个方式,只需要得到一半颠倒的数,比如
1221,我们若得到后一半“21”颠倒的数即“12”,并与前一半数进行比较即可避免超过int范围。

bool isPalindrome(int x) {
    if(x < 0) return false;
    if(x % 10 == 0 && x/10 != 0) return false;
    int revertedNumber = 0;
    while(x > revertedNumber)
    {
        revertedNumber = revertedNumber * 10 + x % 10;
        x /= 10;
    }
    return x == revertedNumber || x == revertedNumber/10;
}

猜你喜欢

转载自blog.csdn.net/karry_zzj/article/details/86570031
今日推荐