簡體   English   中英

如何解決java反向整數leetcode問題

[英]How to solve java reverse integer leetcode problem

嘗試了所有通過測試用例的方法,但它仍然只顯示一個錯誤。 我不知道如何糾正錯誤。

輸入: 1534236469
實際輸出: 1056389759
預期輸出: 0

我不知道為什么我的代碼沒有給出輸出 0。

class Solution
{
    public static int reverse(int x)
    {
        boolean flag = false;
        if (x < 0)
        {
            x = 0 - x;
            flag = true;
        }
        int res = 0;
        int p = x;
        while (p > 0)
        {
            int mod = p % 10;
            p = p / 10;
            res = res * 10 + mod;
        }
        if (res > Integer.MAX_VALUE)
        {
            return 0;
        }
        if (flag)
        {
            res = 0 - res;
        }
        return res;
    }

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int revinteger = reverse(x);
        System.out.println(revinteger);
    }
}

語句res > Integer.MAX_VALUE永遠不會為真,因為resint數據類型。 並且int永遠不能大於Integer.MAX_VALUE (MAX_VALUE 本身就是我們可以存儲為 int 的最大值)。
使用long數據類型來反轉數字,並在最后返回結果的整數值。

if (res > Integer.MAX_VALUE)

如果它是整數的最大可能值,它將如何大於它? 您必須以另一種方式檢測它。

一種方法是使用long數據類型而不是int 然后,它可以變得大於Integer.MAX_VALUE ,並且該捕獲將起作用。

否則,您可能會找到另一種方法來捕捉這種情況。

因為基於 long 的操作相對較慢,所以我只會使用long來做最后的檢查,以確定是否即將發生溢出。

很明顯,如果除最后一位以外的所有數字都反轉,則沒有int會導致溢出。 所以在返回值之前處理循環外的最后一位數字。 min 的邊界情況首先被消除,以方便后續處理。 現在只有Integer.MAX_VALUE與正數和負數有關。

public static int reverse(int v) {
    if (v == Integer.MIN_VALUE) {
        return 0; // guaranteed overflow if reversed.
    }
    int rev = 0; 
    long ovflLimit = Integer.MAX_VALUE;
    int sign = v < 0 ? -1 : 1;
    v *=sign;
    
    while (v > 9) {
        int digit = v % 10;
        rev =  rev * 10 + digit;
        v/=10;
    }
    long ovfl = (long)(rev)*10+v;
    return ovfl > ovflLimit ? 0 : (int)(ovfl)*sign;
}

這個問題可以通過多種方式解決,但是如果我們堅持使用Java和您的解決方案,那么正如一些答案中已經指出的那樣,通過使用int條件if(res > Integer.MAX_VALUE)永遠不會為true 因此,您不會得到預期的輸出為 0。

您可以通過將值轉換為long並檢查它是否超出int限制,在反轉最后一位數字之前進行檢查。 正如 WJS 所建議的那樣。

如果你想堅持你的解決方案而不做太多改變,下面是相同的工作代碼。

class Solution {

    public static int reverse(int x) {
        boolean flag = false;
        long input = x;
        if (input < 0) {
            input = 0 - input;
            flag = true;
        }

        long res = 0;
        long p = input;

        while (p > 0) {
            long mod = p % 10;
            p = p / 10;
            res = res * 10 + mod;
        }

        if (res > Integer.MAX_VALUE) {
            return 0;
        }

        if (flag) {
            res = 0 - res;
        }

        return (int) res;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int revInteger = reverse(x);
        System.out.println(revInteger);
    }
}

暫無
暫無

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

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