leetcode力扣9. 回文数讲解

112 阅读2分钟

9.回文数

题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

解题思路1:

  1. 首先,我们可以将整数 x 转换为字符串,以便于比较字符。
  2. 创建两个指针,一个指向字符串的起始位置,另一个指向字符串的末尾位置。
  3. 使用一个循环,比较指针所指向的字符是否相等,直到两个指针相遇或者交叉。
  4. 如果比较过程中发现任意两个字符不相等,则说明整数 x 不是回文数,返回 false。
  5. 如果比较过程中所有字符都相等,则说明整数 x 是回文数,返回 true。

解题思路2:

  1. 首先,判断输入的整数x是否为负数,如果是负数则直接返回false。另外,如果x的末尾是0也直接返回false。因为以0结尾的整数不可能是回文数,除非这个数本身是0。
  2. 初始化一个变量j为0,用来存储反转后的整数。
  3. 使用一个循环,将输入的整数x逐位反转。每次循环,将j乘以10并加上x的个位数(通过x%10获取),然后将x除以10进行下一位的处理。
  4. 当循环结束后,通过判断j是否等于x或者j除以10是否等于x,来确定是否是回文数。这是因为当x为奇数位数时,j会比x多一位,所以通过j除以10和x进行比较;当x为偶数位数时,j与x的位数相同,直接比较即可。
  5. 如果判断条件成立,则返回true,否则返回false。

解题思路3:

  1. 首先,如果x是负数,则直接返回false,因为负数不可能是回文数。
  2. 初始化一个变量reversed为0,用于存储反转后的整数。
  3. 创建一个变量original,将其初始化为x,用于存储原始的x的值。
  4. 使用一个循环,将x逐位反转。每次循环,将x的个位数取出(通过x % 10),并将其乘以10加到reversd上,然后将x除以10,继续处理下一位。
  5. 当循环结束后,比较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;
    }
};