難度
簡單
題目
給定一個32位的整數(shù),返回一個翻轉(zhuǎn)的整數(shù)
Example 如下:
Input: 123
Output: 321
--------------
Input: -123
Output: -321
---------------
Input: 120
Output: 21
思路
思路一
對給定的 number 取 10 的余數(shù)并將值賦給 result西雀,每次取余都需要將 result 的值乘以 10 并將 number 除以 10萨驶,直到number值為 0。注意負(fù)數(shù)需要在最終結(jié)果乘 -1艇肴。時間復(fù)雜度為:O(lgn)腔呜。
注意邊界值的判斷。
思路二
將數(shù)字取絕對值后轉(zhuǎn)化為字符串再悼,并調(diào)用字符串的reversed()
方法核畴,之后再轉(zhuǎn)為整數(shù),并進(jìn)行邊界值判斷冲九。
代碼
方法一
func reverse(_ x: Int) -> Int {
var isBelowZero = 1
var result = 0
var number = x
if x < 0 {
isBelowZero = -1
number = -x
}
while number > 0 {
if result > (Int(Int32.max) - number % 10) / 10 && isBelowZero == 1 ||
-result < (Int(Int32.min) + number % 10) / 10 && isBelowZero == -1 {
return 0
}
result = result * 10 + number % 10
number = number / 10
}
return result * isBelowZero
}
方法二
func reverse(_ x: Int) -> Int {
let s = String(String(abs(x)).reversed())
var v = Int(s) ?? 0
v = x < 0 ? 0 - v : v
if v > Int32.max || v < Int32.min {
return 0
} else {
return v
}
}