2016-09-27 157 views
-2

這裏是a problem on LeetCode快照:NumberFormatException的對於輸入字符串: 「9646324351」

enter image description here

對於這個問題,他們提供您必須填寫這個框架代碼:

public int reverse(int x) { 
} 

當測試解決方案,它似乎提供了不合理的投入,不會讓我提交我的解決方案。錯誤是:

enter image description here

注意輸入是1534236469。這適合於int,因爲輸入,但是反轉版本9646324351自然不會,因爲Java中的int的最大正值是2147483647

這是LeetCode測試中的錯誤嗎?或者是有一些技巧我無法想象,神奇地讓我返回9646324351,一個明顯超出範圍的值,從reverse返回作爲int

這裏是我的代碼,但是代碼幾乎沒有關係,因爲返回類型(int)由該問題固定的(所以由「整數」,他們真的是int,不long):

public int reverse(int x) { 
    String intString; 
    StringBuilder sb = new StringBuilder(); 
    if(x < 0){ 
     sb.append("-"); 
     x = x * -1; 
    } 
    intString = Integer.toString(x); 
    for(int i = intString.length() - 1; i >= 0; i--){ 
     sb.append(intString.charAt(i)); 
    } 
    String resultString = sb.toString(); 
    int result = Integer.parseInt(resultString); 
    return result; 
} 
+3

這是太大。使用Long.parseLong – Eran

回答

1

這是LeetCode測試中的錯誤。根本沒有辦法將它們要求的返回值存儲在int中,因此無法按照提供的框架代碼將其從reverse中返回。

也許測試用例在整個範圍的int隨機生成的,而不是考慮到reverse可以採取的值超出範圍爲int對於某些輸入。

事實證明,他們希望您返回0如果反轉的數字超出範圍。不是他們懶得在問題的任何地方提及。

+0

*(爲什麼這是一個CW回答:我是重新打開這個問題的人,我不希望任何不合適的外觀。)* –

+1

我終於到了它的底部。顯然,那個測試用例是故意引入的,你應該測試32位int溢出,並且只要它發生就返回0。你可以編輯答案,爲了其他人的利益,這可能是有用的。 – Fourth

+0

@第四:他們已經對這些小細節留下了可憐!因爲這不是一個合理的假設... –

1

您應該使用Long.parseLong()。這個數字對於整數來說太大了。整數的最大值是2^31-1 = 2147483647。

+2

他仍然不能將結果放入他的變量,因爲它是一個int。該變量需要一個很長的,而不是int –

+0

感謝您的幫助,但請閱讀我的編輯 – Fourth

+3

@第四沒有辦法,你永遠不能將數字9646324351置於'int',因爲數字太大而不適合'int'。如果Leetcode要求你把這個數字放在'int'中,那麼他們給你一個不可能完成的任務。 – Jesper

0

我完成了通過如下方法

int result=0; 
    try{ 
     result = Integer.parseInt(stringBuilder.toString()); 
     return result; 
    }catch(Exception e){ 
     return 0; 
    } 
+0

這樣做並不能解決OP的問題 –

相關問題