题目
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解决方案
题目很简单,通过求模和求余可以实现整数的反转,需要注意负数以及值溢出问题就好。
func reverse(x int) int {
var tmp int
var sum int
const (
MAX_INT = 2147483647
MIN_INT = -2147483648
)
flag := 1
if x < 0 {
flag = -1
x = -1 * x
}
for x != 0 {
// fmt.Println(x)
tmp = x % 10
sum = sum*10 + tmp
x = x / 10
}
res := flag * sum
if (res > MAX_INT) || (res < MIN_INT) {
return 0
}
return res
}
复杂度分析
时间复杂度:O(log(x)),x 中大约有log10(x)位数字。
空间复杂度:O(1)。