iT邦幫忙

0

7. Reverse Integer 為什麼這一筆測資過不了

題目連結:
leetcode.com/problems/reverse-integer

我的程式碼如下:

class Solution:
    def reverse(self, x: int) -> int:
        if x > 0:
            return int(str(x)[::-1])
        if x == 0:
            return 0
        if x < 0:
            return (int(str(-x)[::-1])*-1)

錯誤訊息為
Input
1534236469

Output
9646324351

Expected
0
WA

為麼正確答案是0?
不是應該是9646324351嗎?
求救大佬

看更多先前的討論...收起先前的討論...
通靈亡 iT邦研究生 2 級 ‧ 2021-05-02 13:58:01 檢舉
If reversing x causes the value to go outside the signed 32-bit integer range [-2^31, 2^31 - 1], then return 0.

9646324351 超過 2147483647 回傳0。
1092B0007 iT邦新手 4 級 ‧ 2021-05-02 14:45:38 檢舉
喔所以不只是輸入要小於2147483647,輸出也要小於2147483647嗎?
你的連結是有問題的......
1092B0007 iT邦新手 4 級 ‧ 2021-05-02 17:13:42 檢舉
連結並沒有問題喔

1 個回答

1
kopa92414
iT邦見習生 ‧ 2021-05-02 19:51:44
最佳解答

我是剛學 C 的小菜鳥
我的理解是,當 reverse 的值即將超過 INT_MIN (-2^31) 及 INT_MAX (2^31-1) 會產生溢位而產生錯誤的值,我會在 Reverse 的值即將溢位時判斷是否超過,如果會超過就回傳 0。

我不確定 python 溢位後會有甚麼後果,但看來是會自動修正。那這裡我會用條件判斷,


return value > reverse 的 INT_MAX OR return value < reverse 的 INT_MIN

return 0;

給你參考看看~

1092B0007 iT邦新手 4 級 ‧ 2021-05-03 08:36:19 檢舉

謝謝您的回答

我要發表回答

立即登入回答