【问题标题】:In If condition explanationIn If 条件说明
【发布时间】: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>7pop<-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


【解决方案1】:

-2147483648 到 2147483647 有符号整数范围如果条件为真,当 rev 整数等于最大整数值时,rev==(2147483647) 并且给定整数的最后一位大于 7,而不是仅在 if 条件中输入返回 0 . 与上面相同,如果也使用(-2147483648)检查相同的条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多