跳转到主要内容

回文数

简单 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数: 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是
class Solution {
public:
    static bool isPalindrome(const int& x) {
        if (x < 0 || (x % 10 == 0 && x != 0)) return false;
        int reversed = 0;
        int original = x;
        while (original > reversed) {
            reversed = reversed * 10 + original % 10;
            original /= 10;
        }
        return original == reversed || original == reversed / 10;
    }
};
首先可以明确的是 负数以 0 结尾的数 不是回文数. 例如 -100110 , 然后观察回文数的特点会发现前后是对称的, 这样可以通过取余的方式拿到后面的数字, 前面的则可以通过除 10 拿到前面的数字, 这样不断的将原本的数字进行取余和除操作再进行反转, 直到取到的后面是数字大于前面剩下的数字, 例如 12321 后面一直取到 123 此时大于前面的 12 因为这个回文数的位数是奇数, 那么必然这样得到的数字位数是不相等的, 将取到反转后的数字除 10 , 减去一位, 这样就和剩下的数字相等 也可以这样写, 转化成字符串然后迭代比较, 也可以转换为 char 等等解法
class Solution {
public:
    static bool isPalindrome(const int& x) {
        if (x < 0) return false;
        std::string str = std::to_string(x);
        return std::equal(str.begin(), str.end(), str.rbegin());
    }
};
Last modified on December 31, 2025