[LeetCode]7.整数反转
题目描述
解法
- 弹出和推入数字,溢出前进行检查
可以使用x % 10
将x
尾部数字"弹出",同时x /= 10
,以x != 0
作为循环条件。用一个整形变量rev
按顺序接收弹出的数字,即rev = rev *10 + pop
,这里pop = x % 10
。
需要注意溢出的情况,提前判断:
32位有符号整形的取值范围为-2147483648~2147483647
。
rev
为正数时,如果rev > INTMAX/10
则rev = rev *10 + pop
肯定溢出了,如果rev = INTMAX/10
,这时如果pop > 7
(7
为INTMAX
的个位数字)则溢出。
rev为负数时
,如果rev < INTMIN/10
则rev = rev *10 + pop
肯定溢出了,如果rev = INTMIN/10
,这时如果pop < -8
(-8
为INTMIN
的个位数字)则溢出。
class Solution {
public int reverse(int x) {
int rev = 0;
while(x != 0) {
int pop = x % 10;
x /= 10;
if(rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE/10 && pop > 7))return 0;
if(rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE/10 && pop < -8))return 0;
rev = rev * 10 + pop;//rev有可能溢出,所以需要提前判断
}
return rev;
}
}
参考资料
https://leetcode-cn.com/problems/reverse-integer/solution/zheng-shu-fan-zhuan-by-leetcode/