题目描述
题解
取巧法
class Solution {
public:
int reverse(int x) {
long rev = 0;
while(x != 0) {
int pop = x % 10;
x /= 10;
rev = rev * 10 + pop;
}
// 溢出检查,INT_MAX=2147483647,INT_MIN=-2147483648
if(rev > INT_MAX || rev < INT_MIN) return 0;
return int(rev);
}
};
弹出和推入数字 & 溢出前进行检查
-
思路:我们可以一次构建反转整数的一位数字。在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。
-
溢出前进行检查:
-
假设rev为正数,若导致溢出,则有如下两种种情形:
- ,且
-
假设rev为负数,若导致溢出,则有如下两种种情形:
- ,且
-
class Solution {
public:
int reverse(int x) {
int rev = 0;
while(x != 0) {
int pop = x % 10; // 弹出数字
x /= 10;
// 溢出前进行检查,INT_MAX=2147483647,INT_MIN=-2147483648
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;
}
};
网友评论