切換
舊版
前往
大廳
主題

LeetCode - 7. Reverse Integer 解題心得

Not In My Back Yard | 2020-07-24 02:06:24 | 巴幣 0 | 人氣 293

題目連結:


題目意譯:
給定一個 32 位元有號整數 x,請反轉其位數的順序。

注:因為 32 位元有號整數其值域範圍為 [-2 ^ 31, 2 ^ 31 - 1]。在此明定,當反轉後有溢位的狀況發生時,回傳結果應為 0 。


範例測資:
範例 1:
輸入: 123
輸出: 321

範例 2:
輸入: -123
輸出: -321

範例 3:
輸入: 120
輸出: 21


解題思維:
將該整數 x 分解成一位一位然後倒過來放回去就可以完成反轉,類似於這題的做法(但是注意本題數字可以有負號)。

不過 leetCode 系統在處理有號整數的時候比較特別(至少對 C 跟 C++ 來說),只要你的有號整數在某些操作下會導致溢位時,就會有「例外情形」(Exceptions)發生,程式便會停止運行。

因此,你當然可以將結果用 long long 型態(對於 C 或 C++)儲存,然後判斷有無超過值域範圍。但是如果真的要使用有號整數來處裡的話,就要預先判斷接下來的操作會不會使數字超出表示範圍。如果會,這此題的要求即是回傳 0 ;不過就繼續操作。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作