leetcode 8. 字符串转换整数 (atoi)

104 阅读1分钟

题目链接

按照题目中给出的处理步骤做即可。重点是判断越界(可参考整数反转)。下面给出的解法的技巧是按负数计算,因为231-2^{31}的绝对值大于23112^{31}-1

以下代码已提交通过。

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
}