题解 | #表示数值的字符串#
表示数值的字符串
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 }