目录
9.回文数
题目:给你一个整数
x
,如果x
是一个回文整数,返回true
;否则,返回false
。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,
121
是回文,而123
不是。
解题思路1:
-
首先,我们可以将整数 x 转换为字符串,以便于比较字符。
-
创建两个指针,一个指向字符串的起始位置,另一个指向字符串的末尾位置。
-
使用一个循环,比较指针所指向的字符是否相等,直到两个指针相遇或者交叉。
-
如果比较过程中发现任意两个字符不相等,则说明整数 x 不是回文数,返回 false。
-
如果比较过程中所有字符都相等,则说明整数 x 是回文数,返回 true。
解题思路2:
-
首先,判断输入的整数x是否为负数,如果是负数则直接返回false。另外,如果x的末尾是0也直接返回false。因为以0结尾的整数不可能是回文数,除非这个数本身是0。
-
初始化一个变量j为0,用来存储反转后的整数。
-
使用一个循环,将输入的整数x逐位反转。每次循环,将j乘以10并加上x的个位数(通过x%10获取),然后将x除以10进行下一位的处理。
-
当循环结束后,通过判断j是否等于x或者j除以10是否等于x,来确定是否是回文数。这是因为当x为奇数位数时,j会比x多一位,所以通过j除以10和x进行比较;当x为偶数位数时,j与x的位数相同,直接比较即可。
-
如果判断条件成立,则返回true,否则返回false。
解题思路3:
-
首先,如果x是负数,则直接返回false,因为负数不可能是回文数。
-
初始化一个变量
reversed
为0,用于存储反转后的整数。 -
创建一个变量
original
,将其初始化为x,用于存储原始的x的值。 -
使用一个循环,将x逐位反转。每次循环,将x的个位数取出(通过x % 10),并将其乘以10加到
reversd
上,然后将x除以10,继续处理下一位。 -
当循环结束后,比较
original
和reversed
的值。如果它们相等,则说明x是回文数,返回true;否则返回false。
解法1:
class Solution {
public:
int isPalindrome(int x) {
string str = to_string(x);
int start = 0;
int end = str.length() - 1;
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
return true;
}
};
解法2:
class Solution {
public:
int isPalindrome(int x) {
if(x < 0 || x != 0 && x % 10 ==0)return false;
int j = 0;
while(j<x){
j = j * 10 + x % 10;
x /=10;
}
return j == x || x == j/10;
}
};
解法3 :
class Solution {
public:
int isPalindrome(int x) {
if (x < 0) {
return false;
}
int reversed = 0;
int original = x;
while (x > 0) {
int digit = x % 10;
reversed = reversed * 10 + digit;
x /= 10;
}
return original == reversed;
}
};