65.有效数字

55 阅读1分钟

思路

构建一个状态图,沿着图走,3,5,6返回true否则false

0683d701f2948a2bd8c235867c21a3aed5977691f129ecf34d681d43d57e339c-DFA.jpeg

代码

/**
 * @param {string} s
 * @return {boolean}
 */
var isNumber = function(s) {
    //构建图
    const g = {
        //blank:空格
        //sigin:+/-
        //digint:数字(0-9)
        0:{'blank':0,'sign':1,'.':2,'digint':6},
        1:{'digint':6,'.':2},
        2:{'digint':3},
        3:{'digint':3,'e':4},
        4:{'digint':5,'sign':7},
        5:{'digint':5},
        6:{'digint':6,'.':3,'e':4},
        7:{'digint':5},
    }

    //  记录状态
    let state = 0;
    for(c of s.trim()){
        if(c >= '0' || c <= '9'){
            c = 'digint'
        }else if (c === ' '){
            c = 'blank'
        } else if (c === '+' || c === '-'){
            c = 'sign'
        }

        state = g[state][c]
        if(state === undefined){
            return false
        }
        if(state == 3 || state == 5 || state == 6){
            return true
        }
        return false
    }
};

复杂度

时间:O(n) 空间:O(1)