朝气蓬勃

码农的自我修炼

LeetCode 65 Valid Number

问题

https://leetcode.com/problems/valid-number/

解法

构造状态转移表, 根据输入转移

class Solution {
public:
    Solution()
    {
        memset(stateTable, 0, sizeof(stateTable));
        stateTable[Start_s][Blank] = Start_s;
        stateTable[Start_s][Signal] = PreInterge_s;
        stateTable[Start_s][Decimal] = NoIntDecimal_s;
        stateTable[Start_s][Number] = Interge_s;

        stateTable[PreInterge_s][Number] = Interge_s;
        stateTable[PreInterge_s][Decimal] = NoIntDecimal_s;

        stateTable[Interge_s][Number] = Interge_s;
        stateTable[Interge_s][Decimal] = Decimal_s;
        stateTable[Interge_s][Exp] = Exp_s;
        stateTable[Interge_s][Blank] = End_s;

        stateTable[Decimal_s][Number] = DecimalPart_s;
        stateTable[Decimal_s][Exp] = Exp_s;
        stateTable[Decimal_s][Blank] = End_s;

        stateTable[NoIntDecimal_s][Number] = DecimalPart_s;

        stateTable[DecimalPart_s][Number]= DecimalPart_s;
        stateTable[DecimalPart_s][Exp]= Exp_s;
        stateTable[DecimalPart_s][Blank] = End_s;

        stateTable[Exp_s][Signal] = PreExpPart_s;
        stateTable[Exp_s][Number] = ExpPart_s;

        stateTable[PreExpPart_s][Number] = ExpPart_s;

        stateTable[ExpPart_s][Number] = ExpPart_s;
        stateTable[ExpPart_s][Blank] = End_s;

        stateTable[End_s][Blank] = End_s;
    }
    typedef enum STATE {Err_s = 0, Start_s, PreInterge_s, Interge_s, Decimal_s, NoIntDecimal_s, DecimalPart_s, Exp_s, PreExpPart_s, ExpPart_s, End_s , StateNum } State;
    typedef enum SYMBOL { Blank =0, Number, Decimal, Exp, Signal, Other, SymbolNum} Symbol;
    bool isNumber(string s) {
        State state = Start_s;
        for (int i=0; i< s.size(); ++i)
        {
            Symbol input;
            if ('0'<=s[i] && s[i] <= '9')
                input = Number;
            else if (s[i] ==' ')
                input = Blank;
            else if (s[i] == 'e' || s[i] =='E')
                input = Exp;
            else if (s[i] == '.')
                input = Decimal;
            else if (s[i] == '+' || s[i] == '-')
                input = Signal;
            else
                return false;

            state = stateTable[state][input];
            if (state == Err_s)
                return false;

        }
        state = stateTable[state][Blank];
        return state == End_s;
    }
private:
    State stateTable[20][10];
};
阅读更多
版权声明:想转就转,记得附上原文链接。 https://blog.csdn.net/galaxy_wolf/article/details/51541399
文章标签: leetcode
个人分类: leetcode
上一篇cmake 资料
下一篇leetcode 73. Set Matrix Zeroes
想对作者说点什么? 我来说一句

171. Excel Sheet Column Number.py

2018年03月02日 335B 下载

LeetCode最全代码

2017年04月09日 4.25MB 下载

leetcode solution

2018年06月07日 1.15MB 下载

leetcode java解答答案

2015年12月20日 36KB 下载

leetcode java题解

2015年08月10日 54KB 下载

leetcode经典题目全解析

2018年05月27日 1.09MB 下载

LeetCode题库答案(数据库)

2018年04月28日 416KB 下载

LeetCode java版本练习题

2017年12月06日 383KB 下载

没有更多推荐了,返回首页

关闭
关闭