leetcode之字符串转换整数 (atoi)Golang
用go语言解决这道题比较简单,对于一个给定的字符串,主要需要做以下几个方面的工作:
1、首先去除字符串开头的空格,可以用strings.TrimSpace()方法来解决
2、然后判断新的字符串的第一个字符是什么,是否满足转换函数的要求,如果不满足,就返回0值,否者就进行转换,可以用一个正则表达式来判定`[+-]|[0-9]`
3、然后从去除符号位开始的第一位进行转换:
如果第一位是加号+或者减号-,那么就从第二位开始转换,否则从第一位开始转换,如果遇到第一个不是数字的字符,那么转换过程结束,输出结果
转换的方法是依次取出下一位,将他由字符变成对应的数字,再加上10乘以以前的数字,例如:“123”
一:0*10+1=1
二:1*10+2=12
三:12*10+3=123
所以转化就完成了
值得注意的是,每转化一位数字以后,就判断是否超出int32的范围,如果超出范围了,那么就输出边界值就可以了
4、最后由第一位的符号位判断正负,如果是“-”,那么就是负数,否则就是正数
代码如下:
func myAtoi(str string) int {
const max = 1 << 31
resultNum := 0
newStr := strings.TrimSpace(str)
length := len(newStr)
if length == 0 {
return 0
}
reg := regexp.MustCompile("[+-]|[0-9]")
if !reg.MatchString(string(newStr[0])) {
return 0
}
flag := false
index := 0
if newStr[0] == '-' {
flag = false
index = 1
} else {
flag = true
}
if newStr[0] == '+' {
index = 1
}
for i := index; i < length; i++ {
if newStr[i] > '9' || newStr[i] < '0' {
break
}
resultNum = resultNum*10 + int(newStr[i]-'0')
if resultNum >= max {
resultNum = max
break
}
}
if flag {
if resultNum == max {
return max - 1
}
return resultNum
}
return 0 - resultNum
}
浙公网安备 33010602011771号