leetcode : Reverse Integer
runtime 0 ms, beats 100% of cpp submissions
O(log(n)) solution with explanation
tags: number
🔗 link
📖 description
給定一個 32 bit 的數字 x (signed) ,將數字反轉輸出,如果超過表示上限就回傳 0 ,過程中不能使用 64 bit 的數字做儲存
ex. 123 -> 321 -123 -> -321
🧠 solution
因題目設定的限制,這題變得沒有那麼直接,需要針對可能出現超過限制的數值進行控制,當超過上限就直接回傳 0 即可
ex. 2147483647 -> 7463847412 (不符合,超過最大數字) -2147483647 -> -7463847412 (不符合,超過最小數字)
由於方便,我們可以將輸入的數字先轉換為負數,可以少考慮一種狀況 (負數的表示上限為 -2147483648)
而要判斷有沒有超過上限,不能直接與 INT_MAX, INT_MIN 比較大小,所以可以換個思路去跟 INT_MIN / 10 比較大小,但會出現兩種情況表示超過上限
- num > INT_MIN / 10
- num == INT_MIN / 10 且下一個加進來的位數小於 -8 (負數的表示上限為 -2147483648)
⏳ time complexity
迴圈的次數取決於輸入數字的位數,所以時間複雜度為 O(log(n)) (此處的 log 以 10 為底)
總時間複雜度 O(log(n))
📝 code
1 | class Solution { |