题目:见牛客网 JZ20 表示数值的字符串
巧妙的解法,总是能让人欢欣鼓舞,太赞了!
参考:tengzbiao大佬的 (下面为Go语言版本)
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
// 参考 tengzbiao
import (
"strings"
)
func isNumeric( str string ) bool {
str = strings.TrimSpace(str)
if str == "0" { return true }
idx, n := 0, len(str)
isUnsignerNumber := func() bool {
tmp := idx
for idx<n && str[idx]>='0' && str[idx] <= '9' { idx++ }
return idx > tmp // 这部分至少存在一个数字
}
isNumber := func() bool { // 就是为了去掉正负号
if idx<n && (str[idx]=='+' || str[idx]=='-') { idx++ }
return isUnsignerNumber()
}
fg1, fg2 := isNumber(), false // 默认第二部分为空,如整数时
// 小数的情况
if idx<n && str[idx]=='.' { // 小数点后半部分是否合理
idx++
fg2 = isUnsignerNumber()
}
// 科学计数时
if idx<n && (str[idx]=='e' || str[idx]=='E') {
idx++
if !isNumber() { return false }
}
return idx==n && (fg1 || fg2)
}