leetcode-7. Reverse Integer

该博客讨论了如何在给定的32位整数范围内反转一个整数,并处理可能的溢出情况。提供了两种解决方案,一种是通过检查反转过程中绝对值是否超过最大整数限制,另一种是直接比较反转过程中的中间结果是否超出范围。这两种方法都确保了在可能出现的溢出时返回0。

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

7. Reverse Integer

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-231, 231 - 1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

 

Example 1:

Input: x = 123
Output: 321

Example 2:

Input: x = -123
Output: -321

Example 3:

Input: x = 120
Output: 21

Example 4:

Input: x = 0
Output: 0

Constraints:

  • -231 <= x <= 231 - 1

 

解法: 此题的意思就是将给定的一个数进行反转,如果存在溢出情况就返回0。

将数字进行反转并不难,可以除10取余数进行操作,此问题的关键就是要判断溢出时的情况

因为输入的数字是int型,所以它的范围就是[INT_MIN,INT_MAX],即-2147483648~2147483647 之间。

那么res最大的情况就是214748364,因为x是一个整数,在可能溢出的情况下其开始的第一位是1或者2,

所以 res 只能是 2147483641 或 2147483642 都在 int 的范围内,但是它们对应的x为 1463847412 和 2463847412,

后者超出了数值范围。所以当过程中 res 等于 214748364 时, 输入的x只能为 1463847412, 翻转后的结果为 2147483641,都在正确的范围内。

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while (x != 0) {
            if (abs(res) > INT_MAX / 10) return 0;
            res = res * 10 + x % 10;
            x /= 10;
        }
        return res;
    }
};

还有另一种方法就是直接判断溢出是与INT_MAX或者INT_MIN进行比较,详细的解释可以查看leetcode

class Solution {
public:
    int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > INT_MAX/10 || (rev == INT_MAX / 10 && pop > 7)) return 0;
            if (rev < INT_MIN/10 || (rev == INT_MIN / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值