Skip to content

65. 有效数字 #28

@qulingyuan

Description

@qulingyuan

65. 有效数字

解题思路

状态机

解题步骤

构建一个表示状态的图。

遍历字符串,并沿着图走,如果到了某个节点无路可走就返回false。

遍历结束,如走到3/5/6,则返回true,否则返回false。

代码实现

/**
 * @param {string} s
 * @return {boolean}
 */
var isNumber = function(s) {
    const graph = {
        0: {'blank': 0,'sign':1,'.':2,'digit':6},
        1: {'digit':6,'.':2},
        2: {'digit':3},
        3: {'digit':3,'e':4},
        4: {'digit':5,'sign':7},
        5: {'digit':5},
        6: {'digit':6,'.':3,'e':4},
        7: {'digit':5}
    }
    let state = 0;
    for(c of s.toLowerCase().trim()){
        if(c >= '0' && c <= '9'){
            c = 'digit';
        }else if(c === ' '){
            c = 'blank';
        }else if(c === '+' || c === '-'){
            c = 'sign';
        }
        state = graph[state][c];
        if(state === undefined){
            return false;
        }
    }
    if(state === 3 || state === 5 || state === 6){
        return true;
    }
    return false;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions