剑指Offer 20. 表示数值的字符串

发布时间 2023-08-26 17:23:51作者: 小星code

题目链接: 剑指Offer 20. 表示数值的字符串

题目描述:

解法思路:

逐位判断

前后可能含有空格,先去空格再进行处理
根据题意,可以分析出数字格式为:

(+/-)(0-9)(.)(0-9)(e/E)(+/-)(0-9)

代码:

func isNumber(s string) bool {
    // 去空格
    s = strings.Trim(s, " ")
    var isNum, isDot, isE bool
    for i := range s {
        if s[i] >= '0' && s[i] <= '9' {
            isNum = true
        } else if s[i] == 'E' || s[i] == 'e' {
            // e/E 重复出现
            // 前面没数字
            if isE || !isNum {
                return false
            }
            isE = true
            // e 后面肯定需要跟数字,将该判断置false
            isNum = false
        } else if s[i] == '+' || s[i] == '-' {
            // +/- 只可能出现在第一位
            // 或者 +/- 前面只可能是 e/E
            if i != 0 && s[i-1] != 'E' && s[i-1] != 'e' {
                return false
            }
        } else if s[i] == '.' {
            // . 重复出现
            // . 出现在 e/E 后面
            if isDot || isE {
                return false
            }
            isDot = true
        } else {
            return false
        }
    }
    // 最后返回 "是否是数值"
    return isNum
}