一涣仿、題目
給出一個 32 位的有符號整數(shù)勤庐,你需要將這個整數(shù)中每位上的數(shù)字進行反轉(zhuǎn)示惊。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?2^31, 2^31 ? 1]愉镰。請根據(jù)這個假設米罚,如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。
二丈探、解題
使用推出數(shù)字和溢出前進行檢查的方法阔拳。
推出數(shù)字pop = num % 10; num /= 10
累加總數(shù)rev = rev * 10 + pop
為了防止溢出,累加前進行溢出檢查类嗤。
時間復雜度:O(n),空間復雜度:O(1)
三辨宠、代碼實現(xiàn)
class Solution {
func reverse(_ x: Int) -> Int {
var num = x
var rev = 0;
while num != 0 {
// 彈出最后一個數(shù)
let pop = num % 10
num /= 10
// 正數(shù)溢出檢查
if rev > 214748364 || (rev == 214748364 && pop > 7) {
return 0
}
// 負數(shù)溢出檢查
if rev < -214748364 || (rev == -214748364 && pop < -8) {
return 0
}
// 累加
rev = rev * 10 + pop
}
return rev
}
}
Demo地址:github