题目
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
题目分析
很简单的题目,虽然是一道medium题
题解
class Solution {
public:
int reverse(int x) {
int flag =1;
if(x<0){
flag=-1;
}
int res=0;
x = abs(x);
while(x>0){
if(res>INT_MAX/10||res<INT_MIN/10){
return 0;
}
res = res*10 + x%10;
x = x/10;
}
return res*flag;
}
};
官方题解
class Solution {
public:
int reverse(int x) {
int rev = 0;
while (x != 0) {
if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {
return 0;
}
int digit = x % 10;
x /= 10;
rev = rev * 10 + digit;
}
return rev;
}
};
总结
一开始没有通过,只是判断了输入的数字是否越界,但根据题意,输出数字也有可能越界,因此需要把判断体条件放在while循环里。另外,while的条件设置有些问题,因为有正负数,所以额外设置了flag,实际上像官方解的做法就不需要