难度
简单
题目
给定一个32位的整数,返回一个翻转的整数
Example 如下:
Input: 123
Output: 321
--------------
Input: -123
Output: -321
---------------
Input: 120
Output: 21
思路
思路一
对给定的 number 取 10 的余数并将值赋给 result,每次取余都需要将 result 的值乘以 10 并将 number 除以 10,直到number值为 0。注意负数需要在最终结果乘 -1。时间复杂度为:O(lgn)。
注意边界值的判断。
思路二
将数字取绝对值后转化为字符串,并调用字符串的reversed()
方法,之后再转为整数,并进行边界值判断。
代码
方法一
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
}
}
网友评论