package main
import (
"strings"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
func isNumeric( str string ) bool {
// write code here
// 去掉前导后导 0
str = strings.Trim(str, " ")
n := len(str)
// 标记数值、小数点、指数前缀是否已经出现
var isNum, isDot, isE bool
for i := 0; i < n; i++ {
switch {
case str[i] == '+' || str[i] == '-': // 正负号出现位置:要么开头,要么 E 后面
if i != 0 && str[i-1] != 'e' && str[i-1] != 'E' {
return false
}
case str[i] >= '0' && str[i] <= '9':
isNum = true
case str[i] == 'e' || str[i] == 'E': // 出现 E 时前面必须有数值
if !isNum || isE {
return false
}
isE = true
isNum = false // 必须重置数值部分,e 后边必须有数值
case str[i] == '.': // 不能重复出现小数点 也不能在小数点存在情况下提前出现 E
if isDot || isE {
return false
}
isDot = true
default: // 其他所有情形默认为 false
return false
}
}
// 最后一位肯定是数字
return isNum
}