【发布时间】:2021-09-08 00:26:57
【问题描述】:
给定一个有符号的 32 位整数 x,返回 x 的数字反转。如果反转 x 导致值超出有符号的 32 位整数范围 [-231, 231 - 1],则返回 0。
在这段代码中我想知道(rev == Integer.MAX_VALUE / 10 && pop > 7)和(rev == Integer.MIN_VALUE / 10 && pop < -8)
他们为什么使用pop>7 和pop<-8?
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;
}
}
【问题讨论】:
-
最大整数值为 2147483647。它在这两个 IF 语句中进行边界检查。因为返回值 (rev) 乘以 10 并加上 pop,所以它检查 rev 值是否等于 214748364(最大 int 值除以 10)并且 pop 不大于 7。因为如果这些值是,那么在最后计算它将超出整数的最大范围。
标签: java arrays algorithm data-structures integer