回文总结

在三种方法之前,须知:所有负数都不是回文!并且以0为结尾都不是回文。

于是有x<0||(x%10==0&&x!=0)

方法一 转换字符串判断

将int型整数转化成字符串,再逐个字符判断。

class Solution
{
public:
    bool isPalindrome(int x)
    {
        bool result;
        if (x < 0)
        {
            return false;
        }
        stringstream ss;
        ss << x;
        string str, reversedStr;
        ss >> str;

        int strSize = int(str.size());
        for (int index = strSize - 1; index >= 0; index--)
        {
            reversedStr.push_back(str[index]);
        }
        result = str == reversedStr;
        return result;
    }
};

方法二 数学法

先循环出整数有多少位,再用求余和除来判断。

class Solution {
    public boolean isPalindrome(int x) {
        //边界判断
        if (x < 0) return false;
        int div = 1;
        //
        while (x / div >= 10) div *= 10;
        while (x > 0) {
            int left = x / div;
            int right = x % 10;
            if (left != right) return false;
            x = (x % div) / 10;
            div /= 100;
        }
        return true;
    }
}

方法三 进阶数学法

当原数从中间分为两个数时,并且将后半部分转置,两部分相等,为回文。

如:12321,分两个部分,前(12)后(21),后转置(12)两者相等

用原数逐渐/10,用新数逐渐x*10+x/10;

class Solution {
public:
    bool isPalindrome(int x) {
        if(x % 10 == 0 && x != 0) return 0;
        int i,sum=0;
        while(x > sum){
            sum *= 10;
            sum += x%10;
            x/=10;
        }
        return x == sum || sum /10 == x;
    }
};

猜你喜欢

转载自blog.csdn.net/Matcha_/article/details/113487202
今日推荐