题目
给你一个 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版权协议,转载请附上原文出处链接和本声明。