leetcode--整数反转

题目

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [− 2 31 -2^{31}231, 2 31 2^{31}231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = 123
输出:321

示例 2:

输入:x = -123
输出:-321

示例 3:

输入:x = 120
输出:21

示例 4:

输入:x = 0
输出:0

思路

本题的难点在于如何判断一个数是否越界。

因为我们无法存储超过 32 位有符号整数范围的数,因此我们无法直接判断一个数是否越界。然而,我们可以在这之前就判断其是否越界。

数限制范围是[-2147483648, 2147483647]。对于一个正数越界有两个条件

  • 当一个数大于 214748364,且还有剩余位数时,越界。
  • 当一个数等于 214748364,且下一位大于 8 时,越界。

对于负数也是相同的道理。

class Solution {
public:
    int reverse(int x) {
        int res = 0;
        while(x != 0){
            int temp = x % 10; // 取最后一位
            if(res > 214748364 || (res == 214748364 && temp > 7))
                return 0;
            if(res < -214748364 || (res == -214748364 && temp < -8))
                return 0;
            
            res = res * 10 + temp;
            x /= 10;
        }
        return res;
    }
};

版权声明:本文为qq_52852138原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。