2021-09-11:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。反转后整数超过 32 位的有符号整数的范围就返回0,假设环境不允许存储 64 位整数(有符号或无符号)。
福大大 答案2021-09-11:
数位用负数。
时间复杂度:O(logN)。
空间复杂度:O(1)。
代码用golang编写。代码如下:
package main import ( "fmt" "math" ) func main() { i := math.MinInt64 ret := reverse(i) fmt.Println(i) fmt.Println(ret) } func reverse(x int) int { neg := ((uint(x) >> 63) & 1) == 1 x = twoSelectOne(neg, x, -x) m := math.MinInt64 / 10 o := math.MinInt64 % 10 res := 0 for x != 0 { if res < m || (res == m && x%10 < o) { return 0 } res = res*10 + x%10 x /= 10 } return twoSelectOne(neg, res, Abs(res)) } func twoSelectOne(c bool, a int, b int) int { if c { return a } else { return b } } func Abs(a int) int { if a < 0 { return -a } else { return a } }
执行结果如下: