问题描述
Reverse digits of an integer.
Example1: x = 123, return 321
Example2: x = -123, return -321
题意很明确,将一个整数反转输出。
思路
首先不用考虑用库函数先转为字符串再反转的方式,这根本不是算法。
整体解决思路为,依次取出整数的每一位数,然后反转,再组装成整数即可。有几个点需要考虑:
- 取末位数。
num % 10
即可。 - 去掉末位数。
num / 10
即可。 - 组装整数。定义
sum := 0
, 循环数字序列,每次sum = sum * 10 + 数字
即可 - 溢出问题。问题规定了整数为32位,因此最大值为
0x7FFFFFFF
, 最小值为-0x80000000
Go实现
用时6ms, 击败20%用Golang的人。
var MIN int = 0x80000000
var MAX int = 0x7FFFFFFF
func reverse(x int) int {
sum := 0
for {
leftDigits := x / 10
lastDigit := x % 10
x = leftDigits
sum = sum * 10 + lastDigit
if 0 == leftDigits {
break
}
}
if sum < -MIN || sum > MAX {
fmt.Println(sum)
sum = 0
}
return sum
}