【C++小白向】LeetCode7. 整数反转

本文围绕LeetCode7整数反转题目展开,给出示例并强调需考虑32位有符号整数的数值范围。题解介绍了反转整数的步骤,如创建变量、取模操作等,还说明了判断反转后整数是否溢出的方法,若溢出则返回0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LeetCode7. 整数反转

题目链接:https://leetcode-cn.com/problems/reverse-integer

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:
输入: 123
输出: 321

示例 2:
输入: -123
输出: -321

示例 3:
输入: 120
输出: 21

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。


题解:
为了解决溢出问题,我的思路是 判断反转后整数是否溢出。
但对于某些刚入坑且基础薄弱的同学来说,可能并不知道如何反转 。

如何反转:
1 . 先创建一个足够大的变量用于存储反转后的整数,如 long long res。
2 . 我们可以通过取模操作获得整数个位(也就是最后一位),本题中是 x % 10。
3 . 接下来只要把 “ x % 10 ” 放在 res 最后一位便可。本题中的做法:先将 res * 10,再与 “x % 10” 相加。
4 . 此时的 x 还是原来的 x,那么我们如何获取 x 的十位(倒数第二位)呢?本题的做法是 “x /= 10;” 。除以10之后,原来的十位变成之后的个位,原来的个位消失,后面只需将其放入循环便可,详见下一步。
5 . 重复以上操作,直到 x 变成 0 为止,因为有负数的存在,所以循环结束的条件为 x == 0。

如何判断:
首先我们需要知道,INT_MAX:int类型的最大值。INT_MIN:int类型的最小值。
当循环结束后,判断反转后的整数是否在 INT_MIN ~ INT_MAX 之间,若在,res不变;如果不在,则返回0。

具体实现过程如下:

class Solution {
public:
    int reverse(int x) {
        long long res = 0;
        while(x != 0) {
            res = res * 10 + x % 10;
            x /= 10;
        }
        return (res > INT_MAX || res < INT_MIN) ? 0 : res; //括号内的“或”,只有两个都为真时,结果才是真。
        
        // 也可以用这个方法,判断long long类型的 res 是否与 int 类型的相等
        //return (int) (res) == res ? (int) (res) : 0; 
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值