簡體   English   中英

LeetCode 7:反向 Integer | 為什么它適用於 long 但不適用於 int?

[英]LeetCode 7: Reverse Integer | why does it work with a long but not with an int?

我試圖在 LeetCode 上解決這個問題,你必須使用 function 來反轉 integer。 約束是,如果反轉的數字超出有符號的 32 位 integer 范圍,即 (-2^31) 到 (2^31 - 1),那么您返回 0。當我使用 integer 像這樣的反轉變量時

class Solution { 
        public int reverse(int x) {
            int rev = 0;
            while (x != 0) {
                rev = rev * 10 + x % 10;
                x /= 10;
            }

            if((rev > Integer.MAX_VALUE) || (rev < Integer.MIN_VALUE))
                return 0;

            return rev;
        }
}

IntelliJ IDEA 表明

Condition 'rev > Integer.MAX_VALUE' is always 'false'

但是,當我使用 long 而不是 int 時,問題就解決了,程序可以按預期運行。

class Solution {
        public int reverse(int x) {
            long rev = 0;
            while (x != 0) {
                rev = rev * 10 + x % 10;
                x /= 10;
            }

            if((rev > Integer.MAX_VALUE) || (rev < Integer.MIN_VALUE))
                return 0;

            return (int)rev;
        }
}

我想知道為什么會這樣?

在第一個代碼塊中, rev是一個整數。 因此,它不可能大於Integer.MAX_VALUE - 整數的最大值。

使用long ,其值可能大於最大可能的int值。 Java int是帶符號的 32 位值。 Java long是有符號的 64 位值。

對我來說,這有效...

class Solution {
    public int reverse(int x) {
        int mod = 0, rev = 0;
            while(x!=0){
                if(rev < Integer.MIN_VALUE/10 || rev > Integer.MAX_VALUE/10){
                return 0;
                }
            mod = x%10;
            x = x/10;
            rev = rev*10 + mod;
            }
            return rev;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM