JZ20 表示數值的字串
阿新 • • 發佈:2022-03-13
題目:見牛客網 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) }