LeetCode #9:Palindrome Number(回文数)

题目描述:

思路:

虽然题目本身的意思可能要让我们用字符串来处理,但是我们可以借鉴#7的做法:如果一个正数的逆序和本身相等,它就是回文数;同时由题意,负数肯定不是回文数。注意一下while循环中int溢出的情况(若sum*10溢出int,则它肯定不是回文数)。

class Solution {
public:
    bool isPalindrome(int x) {
        if (x<0)
            return false;
        int n = x;
        int sum = 0;
        while (n)
        {
            int pop = n % 10;
            if(sum > INT_MAX / 10 || (sum == INT_MAX / 10 && pop > 7)) return false; //判断sum*10是否溢出,若溢出,直接返回false
            sum *= 10;
            sum += n % 10;
            n /= 10;
        }
        if (sum == x)
            return true;
        else
            return false;
    }
};

还有一个更偷懒的办法,直接把n和sum定义成long long(因为有一个测试数据是2147483647),也能通过:

class Solution {
public:
    bool isPalindrome(int x) {
        if (x<0)
            return false;
        long long int n = x;
        long long int sum = 0;
        while (n)
        {
            sum *= 10;
            sum += n % 10;
            n /= 10;
        }
        if (sum == x)
            return true;
        else
            return false;
    }
};

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注