1. 题目
Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only hold integers within the 32-bit signed integer range. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.
2.分析
2.1 中文分析
反转Int,假设大小为32位,超过直接返回0。
2.2 解题思路
对int进行除10求余,进行循环,就可以逐个取出个、十、百、千……位上的数字。同时初始化一个结果值,不断将原数乘10并将取到的数字扔进来相加,最后可以获得反转后的数字。
3. 解答
一开始的解答:
func reverse(x int) int {
var n int
res := 0
for x != 0 {
n = x % 10
x = x / 10
res = res * 10 + n
}
// 超过32位存储范围直接返回0
if res > 2147483647 || res < -2147483647 {
return 0
}
return res
}
Runtime: 13 ms
上面的解法是正负不管直接处理,后来发现效率不加,于是进行优化,正负统一用正来处理最后再转化回来,最后的代码:
import "math"
func reverse(x int) int {
var res int
zf := true
if x < 0 {
zf = false
x = x * -1
}
for x != 0 {
res = res * 10 + x % 10
x = x / 10
}
// 超过32位存储范围直接返回0
if res > math.MaxInt32 || res < math.MinInt32 {
return 0
}
if !zf {
res = res * -1
}
return res
}
这个解的Runtime是 8 ms。
0 条评论
来做第一个留言的人吧!