题解 | #表示数值的字符串#
表示数值的字符串
https://www.nowcoder.com/practice/e69148f8528c4039ad89bb2546fd4ff8
package main
import "strings"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
func isNumeric( str string ) bool {
// write code here
// 利用 . +/- e/E 的关系来求解会清晰一点
// . 只出现一次, 只能出现在 e/E 前面
// e/E 只出现一次,且前面一定有数字
// +- 号必须在第一位或者e/E 后面一位
if len(str) == 0 {
return false
}
s := strings.TrimSpace(str)
s = strings.ReplaceAll(s, "E", "e")
s = strings.ReplaceAll(s, "+","-")
numFlag := false
dotFlag := false
eFlag := false
for i := 0 ; i < len(s) ; i++ {
// 判定为数字,则标记numFlag
if isDigit(s[i]) {
numFlag = true
// 判定为'.'需要没出现过'.'并且没出现过'e'
} else if s[i] == '.' && !dotFlag && !eFlag {
dotFlag = true
// 判定为'e',需要没出现过'e',并且出现过数字
} else if s[i] == 'e' && numFlag && !eFlag {
eFlag = true
numFlag = false
// 判定为'+''-'符号,只能出现在第一位或者紧接'e'后面, 此时不需要做什么
} else if s[i] == '-' && (i == 0 || s[i-1] == 'e' ) {
}else { // 其他情况都判定为 false
return false
}
}
return numFlag
}
func isDigit(n byte) bool {
return n >= 48 && n <= 57
}
查看7道真题和解析
