1. 程式人生 > 其它 >JZ20 表示數值的字串

JZ20 表示數值的字串

題目:見牛客網 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)
}