LeetCode OJ - Valid Number

来源:互联网 发布:在access数据库中 表是 编辑:程序博客网 时间:2024/05/16 11:22

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

分析:状态机的使用,虽然一直在看代码,状态机很熟,这里真正是实现了状态机

class Solution {//finite automatapublic:    vector<vector<int> > transTable;    int inputType(char a)    {        if(a == ' ') return 0;        else if(a == '+' || a == '-') return 1;        else if(a >= '0' && a <= '9') return 2;        else if(a == '.') return 3;        else if(a == 'e') return 4;        else return 5;//illegal input    }    void initTransTable()    {        transTable.resize(9, vector<int>(5, -1));        transTable[0][0] = 0;        transTable[0][1] = 1;        transTable[0][2] = 2;        transTable[0][3] = 7;        transTable[7][2] = 3;        transTable[1][2] = 2;        transTable[1][3] = 7;        transTable[2][2] = 2;        transTable[2][0] = 6;        transTable[2][3] = 3;        transTable[2][4] = 4;        transTable[3][2] = 3;        transTable[3][4] = 4;        transTable[3][0] = 6;        transTable[4][1] = 8;        transTable[8][2] = 5;        transTable[4][2] = 5;        transTable[5][2] = 5;        transTable[5][0] = 6;        transTable[6][0] = 6;    }    bool isNumber(const char *s) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(s == NULL) return false;        initTransTable();        int curState = 0;        while(*s != '\0')        {            int curInput = inputType(*s);            if(curInput == 5) return false;            curState = transTable[curState][curInput];            if(curState == -1) return false;            s++;        }        if(curState == 2 || curState == 3 || curState == 5 || curState == 6) return true;        else return false;     }};


0 0
原创粉丝点击