描述:给出一个32位的有符号整数,你需要将这个整数中美位上的数字进行反转
例1:输入:123 输出:321
例2:输入:-123 输出:-321
例3:输入:120 输出:21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1] 即 [-2147483648,2147483647]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解法一
思路:将整数去掉符号,转换为字符串,通过遍历字符串进行反转,需要判断反转后的字符串整数是否溢出,最后在加上符号,
时间复杂度:O(n)
具体实现:
var a = x
if a == 0 {
return 0
}
//定义一个bool表示正负数
var bool : Bool = true
if x < 0 {
bool = true
}else{
bool = false
}
//将字符串中的-移除
var c = String(x)
if c.contains("-") {
c.removeFirst()
}
var result : String! = ""
//遍历字符串,将当前的字符拼接在后面
for i in c {
result = String(i)+result
}
//如果字符串的第一个字符为0,则需要移除
if result.first == "0" {
result.removeFirst()
}
//判断反转后的字符串整数是否溢出
if NSString.init(string: result).integerValue > 2147483647 {
return 0
}
//如果传入的是负数,则需要加上-标识
if bool {
result = "-"+result
}
return NSString.init(string: result).integerValue
解法二
思路:使用数学方法,在没有数组的情况下,对数字进行 弹出 和 推入操作,最后判断下反转的数字是否溢出
pop:弹出操作
pop = x%10
x /= 10
push:推入操作
temp = rev * 10 + pop
rev = temp
时间复杂度:O(log(x))
具体实现:
func reverseInt(x : Int)->Int{
var a = x
var rev = 0
while a != 0 {
let pop = a%10
a /= 10
if (rev > Int.max/10)||(rev == Int.max/10 && pop > 7){
return 0
}
if (rev < Int.min/10)||(rev == Int.min/10 && pop < -8){
return 0
}
rev = rev*10+pop
}
return rev
}