码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 66.Valid Number

时间:2015-03-07 18:27:06      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

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.

Update (2015-02-10):
The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

[Solution]

状态转移图

    enum InputType 
    {
        INVALID,        // 0 Include: Alphas, ‘(‘, ‘&‘ ans so on
        SPACE,        // 1
        SIGN,        // 2 ‘+‘,‘-‘
        DIGIT,        // 3 numbers
        DOT,            // 4 ‘.‘
        EXPONENT,        // 5 ‘e‘ ‘E‘
    };
    int transTable[9][6] = 
    {
        //0INVA,1SPA,2SIG,3DI,4DO,5E
        {-1,  0,  3,  1,  2, -1,},   //0初始无输入或者只有space的状态
        {-1,  8, -1,  1,  4,  5,},  //1输入了数字之后的状态
        {-1, -1, -1,  4, -1, -1,},  //2前面无数字,只输入了Dot的状态
        {-1, -1, -1,  1,  2, -1,},  //3输入了符号状态
        {-1,  8, -1,  4, -1,  5,},  //4前面有数字和有dot的状态
        {-1, -1,  6,  7, -1, -1,},  //5‘e‘ or ‘E‘输入后的状态
        {-1, -1, -1,  7, -1, -1,},  //6输入e之后输入Sign的状态
        {-1,  8, -1,  7, -1, -1,},  //7输入e后输入数字的状态
        {-1,  8, -1, -1, -1, -1,},  //8前面有有效数输入之后,输入space的状态
    };
    bool isNumber(string s) 
    {
        int state = 0, i = 0;
        while (s[i])
        {
            InputType input = INVALID;
            if (s[i] ==  ) 
                input = SPACE;
            else if (s[i] == + || s[i] == -) 
                input = SIGN;
            else if (isdigit(s[i])) 
                input = DIGIT;
            else if (s[i] == .) 
                input = DOT;
            else if (s[i] == e || s[i] == E) 
                input = EXPONENT;
                
            state = transTable[state][input];
            if (state == -1) 
                return false;
            i++;
        }
        return (state == 1 || state == 4 || state == 7 || state == 8);
    }

 

leetcode 66.Valid Number

标签:

原文地址:http://www.cnblogs.com/ym65536/p/4320612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!