0065.有效数字

方法一:分类讨论

时间复杂度 $O(n)$,空间复杂度 $O(1)$。

func isNumber(s string) bool {
	if len(s) > 0 && (s[0] == '+' || s[0] == '-') {
		s = s[1:]
	}
	if len(s) == 0 {
		return false
	}
	point := false
	for i := 0; i < len(s); i++ {
		if s[i] == '.' && !point {
			if (i > 0 && s[i-1] >= '0' && s[i-1] <= '9') || (i+1 < len(s) && s[i+1] >= '0' && s[i+1] <= '9') {
				point = true
				continue
			}
			return false
		} else if strings.ToUpper(s[i:i+1]) == "E" && i+1 < len(s) && i > 0 {
			for j := i + 1; j < len(s); j++ {
				if s[j] == '.' || strings.ToUpper(s[j:j+1]) == "E" {
					return false
				}
			}
			return isNumber(s[i+1:])
		} else if s[i] < '0' || s[i] > '9' {
			return false
		}
	}
	return true
}