这是Leetcode解决方案中的代码。所以我不明白if条件,为什么必须将Integer.MAX_VALUE除以10(Interger.MAX_VALUE / 10)?
谢谢!
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;
}
return rev;
}
}
答案 0 :(得分:0)
这很简单。它主要是为了避免整数内存超出绑定异常而添加的。
Line 1: rev == Integer.MAX_VALUE / 10
Line 2: rev = rev * 10 + pop;
让我们假设上述情况对于某些值是正确的。 Line 1 means that 10*rev = Integer.MAX_VALUE.
第2行:rev是一个整数。如果按照第1行的规定,我们遇到了rev = Integer.MAX_VALUE,
如果在其顶部添加一个pop的情况,则将遇到整数内存超出限制的异常。为了避免这种情况,添加了第1行。确保执行第1行的示例测试用例为"Pass Integer.MAX_VALUE" as an input to reverse() function.
答案 1 :(得分:0)
reverse(int x)
函数将x
的十进制数字反转。例如,如果x = 102
返回201
,如果x = -102
返回-201
。
计算x
的倒数时,它存储在rev
中。例如,对于x = 102
,rev
采用连续值2
,20
,201
。
在每次迭代中,将rev
乘以10
,并向其添加一个数字。当然,rev
不能大于Integer.MAX_VALUE
(2147483647
)。因此,在将rev
乘以10
之前,我们检查是否将其乘以10
并加上pop
会使其大于Integer.MAX_VALUE
。
我们首先检查rev
是否大于Integer.MAX_VALUE / 10
(214748364
)。如果更大,则反向整数不存在。如果不是,则rev
小于或等于Integer.MAX_VALUE / 10
。如果它小于Integer.MAX_VALUE / 10
,则即使我们将其乘以10
,也可以在其中加上任何数字(pop
,而不会超过Integer.MAX_VALUE
。但是,如果它等于Integer.MAX_VALUE / 10
,则必须确保pop
不是> 7
(2147483647 - 214748364 * 10
),因为否则我们将超出Integer.MAX_VALUE
。
Integer.MIN_VALUE
(2147483648
)同样适用。