按照题目中给出的处理步骤做即可。重点是判断越界(可参考整数反转)。下面给出的解法的技巧是按负数计算,因为的绝对值大于。
以下代码已提交通过。
import "math"
func myAtoi(s string) int {
if s == "" {
return 0
}
var (
i int
l = len(s)
)
// skip space
for ; i < l; i++ {
if s[i] != ' ' {
break
}
}
// everything is space
if i == l {
return 0
}
const (
minInt = math.MinInt32
minQ = minInt / 10
minR = minInt % 10
)
var (
res int
positive = true
)
if s[i] == '+' {
i++
} else if s[i] == '-' {
i++
positive = false
}
for ; i < l; i++ {
c := s[i]
if c < '0' || c > '9' {
break
}
if res < minQ {
res = minInt
break
}
v := -int(c - '0')
if res == minQ && v < minR {
res = minInt
break
}
res = res*10 + v
}
if positive {
if res == minInt {
return math.MaxInt32
}
return -res
}
return res
}