LeetCode 9.回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
利用C++的to_string函数把 x x x转换成字符串,把 s t r i str_i stri和 s t r n − i − 1 str_{n - i - 1} strn−i−1对比,如果不相等返回 f a l s e false false,如果退出循环,返回 t r u e true true
class Solution {
public:
bool isPalindrome(int x) {
string str = to_string(x);
int n = str.size();
for (int i = 0; i < n / 2; i++) {
if (str[i] != str[n - i - 1]) {
return false;
}
}
return true;
}
};
将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。
但是上述方法有一个问题,反转之后的数字可能导致整数溢出。
例如数字 1000000009 1000000009 1000000009,反转之后是 9000000001 9000000001 9000000001,大于INT_MAX, 所以我们需要想一个办法来避免整数溢出的问题。
我们可以将数字反转一半,如果原数字回文,那么反转一半后的数字应等于前半部分的数字。
负数不可能是回文数,因为负号只有一个!!!
class Solution {
public:
bool isPalindrome(int x) {
if (x < 0 || (x != 0 && x % 10 == 0)) {
return false;
}
int y = 0;
while (x > y) {
y = y * 10 + x % 10;
x /= 10;
}
return x == y || x == y / 10;
}
};