tring to Integer (atoi)
题目描述
给你一个字符串将其转换成整数。首先先丢弃掉开头的空格字符(只能是’ ')直到第一个非空格字符为止。后续不能转换成数字的第一个字符起全部舍弃掉。且如果转换出来的整数超过32位大小的有符号整数范围则返回INT_MAX或INT_MIN.
解题思路
直接模拟,注意事项较多,在代码里面说明。代码如下。
func myAtoi(str string) int {
//先去掉头部的空白字符,然后去掉后续空格隔开的字符串
str = strings.TrimLeft(str, " ")
str = strings.SplitN(str, " ", 2)[0]
//flag为正负数,max表示是否超出32位范围,hasPlus先前是否已经有符号-+。
flag := false
max := false
hasPlus := false
res := 0
l:if str == "" {
return 0
}
if str[0] == '-' {
if hasPlus || flag {
return 0
}
flag = true
str = str[1:]
goto l
}
if str == "" {
return 0
}
if str[0] == '+' {
if flag || hasPlus {
return 0
}
hasPlus = true
str = str[1:]
goto l
}
for _, v := range str {
if v >= '0' && v <= '9' {
res = res*10 + int(v-'0')
if res > math.MaxInt32 {
max = true
}
}else {
break
}
}
if flag {
res = -res
}
if max && flag {
return math.MinInt32
}else if max && !flag{
return math.MaxInt32
}
return res
}