leetcode简单算法第9题——《9、回文数》

🍁个人主页

🍀请关注本期专栏,持续更新中: 《LeetCode刷题笔记》

🏷 题目

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number

示例 1:
输入:x = 121
输出:true

示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

🌲 反转数字

思路:回文数既然从左到右和从右到左都是一样的话,我们就可以将那个数进行反转,如果反转的得到的数和原来的数是一样的,那么这个数就是回文数。但因为如果一个数太大,比如:int i = 1123456789;i是这么大的数,而我们反转过来就是:9876543211,这个数明显int类型存不下,所以我们采用反转一半就可以了。

在这里插入图片描述

我们可以排出两种情况绝对不是回文数的,第一种是负数,-123反过来读不可能一样,第二种个位数是0的,这个反转就变成第一个数是0了,这是不可能的。所以代码如下:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0 || (x % 10 == 0 && x != 0)) //先把两种不可能的情况排出掉,负数和个位数为0
        {
            return false;
        }
        int sum = 0;	//定义一个变量来存放反转之后的数
        while(x > sum)	//进行循环遍历,如果原来的数(也就是前面一半的数)大于了后面反转的数就进行循环处理
        {
            sum = sum * 10 + x % 10;	
            //原来的数取模得到后面的数的反转数,如:12321先取1,第二次遍历1*10+2=12,是不是变成反转之后的数了
            x = x / 10;	//将原来的数除10,等到循环结束,就只剩前面一半的数了
        }
        return  x == sum / 10 || x == sum;	
        //x == sum / 10 有的可能是奇数,就需要将中间一位去除再比较是否相等,或者x == sum 直接相等
    }
};

🌲 字符串比较

在这里插入图片描述

class Solution {
public:
    bool isPalindrome(int x) {
        string str = to_string(x);	//to_string()可以将数字转换为字符串
        for(int i = 0, j = str.size()-1; i < str.size() / 2;i++,j--)
        {//定义两个变量,一个从头开始,一个从结尾开始进行比较,循环次数只要字符串长度的一半就好了
            if(str[i] != str[j])	
            {//如果有一对不相等,则就返回false
                return false;
            }
        }
        return true;//循环结束,返回true
    }
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学编程*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值