leetcode力扣9. 回文数讲解

目录

9.回文数

解题思路1:

 解题思路2:

 解题思路3:

解法1: 

解法2:

解法3 :


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. 当循环结束后,比较originalreversed的值。如果它们相等,则说明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;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值