最近開始學習演算法,先直接在力扣上做簡單的題目,發現長時間不做手特別生,考慮步驟提交好多次都提交不上去
題目要求:
自己的思路:
從末位開始,依次拿到乙個數
將每次拿到的數放到依次排開
按照自己的思路實現了一下,一直提交不通過,後來才發現很多數字反轉後可能超出 int 的取值範圍。所以這樣的考慮太過於簡單。
如果有乙個數是1111111119,這個數是小於最大的32位整數2147483647,但是將這個數反過來卻遠大於2147483647,因此這個數是不合法的。
確定 int 的取值範圍為[-2^31, 2^31-1],
首先看對於正數部分,各個位上的數字全部是小於等於 7 ,所以當對這個數取余時發現有大於 7 的數那麼他一定會溢位。
所以,我們到【最大數的1/10】時,就要開始判斷了
如果這個數字大於214748364 那後面就不用再判斷了,肯定溢位了
如果莫格數字等於214748364 ,這是需要跟最大數的末尾數字比較,如果這個數斃還大,說明溢位了
對於負數部分
從【最大數的1/10】時,就要開始判斷了
如果莫格數字小於-214748364 說明溢位了
如果莫格數字等於-214748364 ,還需要跟最小的末尾比較,即看它是否小於 8
class
solution
if(res <
-214748364
||(res ==
-214748364
&& temp
))res = res *
10+ temp;
// 將取到的數字反轉重要一步
x /=10;
}return res;
}}
LeetCode第7題 整數反轉
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...
整數反轉 leetcode力扣第7題
要注意的一點是整型溢位的判斷是在反轉後,所以只要用長整型儲存反轉結果,然後再判斷是否超出整型範圍就可以。本來這道簡單題也不至於做不出來,但是這個整型溢位的問題,我糾結了很久,以為是輸入就要判斷,所以記錄一下這個坑點。class solution int nums 33 int length 0 wh...
Leetcode 7 正數反轉 學習感悟
反轉數字是個很簡單的問題,只需不斷取模累乘即可,int正數的範圍是2147483647,負數的範圍為 2147483648當把這個數反轉時,大於2147483647,則 會發生溢位,所以這道題的關鍵在於判斷是否溢位。正數有如下幾種情況 res int max 10,這種情況無論t為多大,都不會溢位 ...