回文数
简单
给你一个整数 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 结尾的数 不是回文数. 例如 -100 和 110 , 然后观察回文数的特点会发现前后是对称的, 这样可以通过取余的方式拿到后面的数字, 前面的则可以通过除 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