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

Leetcode: Valid Number

时间:2014-12-12 14:33:25      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   for   on   

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.

分析:这道题用Deterministic Finite Automata解,逻辑清晰,代码简洁,关键在于正确画出DFA,几个应该注意的case是".1", "1."都是有效的,但"."是无效的。DFA如下:

bubuko.com,布布扣

C++代码如下:

class Solution {
public:
    bool isNumber(const char *s) {
        enum InputType{
            INVALID,
            SPACE,
            SIGN,//+,-
            DIGIT,
            DOT,
            EXP
        };
        int transitionMatrix[][6] = {
            -1, 0, 1, 2, 3, -1,//next state of S0
            -1, -1, -1, 2, 3, -1,//next state of S1
            -1, 8, -1, 2, 4, 5,//next state of S2
            -1, -1, -1, 4, -1, -1,//next state of S3
            -1, 8, -1, 4, -1, 5,//next state of S4
            -1, -1, 6, 7, -1, -1,//next state of S5
            -1, -1, -1, 7, -1, -1,//next state of S6
            -1, 8, -1, 7, -1, -1,//next state of S7
            -1, 8, -1, -1, -1, -1//next state of S8
        };
        
        int state = 0;
        while(*s != \0){
            InputType itype = INVALID;
            if(*s ==  ) itype = SPACE;
            else if(*s == + || *s == -) itype = SIGN;
            else if(isdigit(*s)) itype = DIGIT;
            else if(*s == .) itype = DOT;
            else if(*s == e || *s == E) itype = EXP;
            
            state = transitionMatrix[state][itype];
            if(state == -1) return false;
            s++;
        }
        
        return state == 2 || state == 4 || state == 7 || state == 8;
    }
};

 

Leetcode: Valid Number

标签:style   blog   http   io   ar   color   sp   for   on   

原文地址:http://www.cnblogs.com/Kai-Xing/p/4159481.html

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