题目
整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
思路
用一个slice来记录给定整数的每一位,然后再反着乘起来
我的垃圾代码(空间复杂度O(n))
func reverse(x int) int {
i:=0
var slice_ []int = make([]int,35)
for i=0;x!=0;i++{
slice_[i]=x%10;
x=x/10
}
len:=i
fmt.Println(slice_)
re:=0
j:=0
for j!=len{
re =re + int(slice_[j]*int(math.Pow10(i-1)))
i--
j++
}
if re > (1<<31-1) || re<=(-1<<31){ //这里1左移31位就表示2的31次方
re=0
}
return re
}
大佬的代码(空间复杂度O(1))
func reverse7(x int) int {
tmp := 0
for x != 0 {
tmp = tmp*10 + x%10
x = x / 10
}
if tmp > 1<<31-1 || tmp < -(1<<31) {
return 0
}
return tmp
}
为方便理解这段代码,给一个样例
stdout里面是每一次循环中tmp中的值