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
}

  

 

posted @ 2020-06-09 22:13  胖胖咩  阅读(383)  评论(0)    收藏  举报