Valid Number

https://leetcode.com/problems/valid-number/description/
看了网上的一种据说比较优美的方法,有限状态机。
这一题的状态共分为8种情况:
0)初始无输入或者输入了space的状态
1)输入了数字的状态
2)前面无数字,只输入了dot的状态
3)输入了符号的状态
4)前面有数字和有dot的状态
5)'e'或者‘E’之后的状态
6)e之后输入了数字的状态
7)e之后输入了符号的状态
8)前面有有效输入以后,输入space的状态
输入符号分为以下几类:
INVALID, // 0 Include: Alphas, '(', '&' ans so on
SPACE, // 1
SIGN, // 2 '+','-'
DIGIT, // 3 numbers
DOT, // 4 '.'
EXPONENT, // 5 'e' 'E'

class Solution:
    # @param s, a string
    # @return a boolean
    # @finite automation
    def isNumber(self, s):
        INVALID=0; SPACE=1; SIGN=2; DIGIT=3; DOT=4; EXPONENT=5;
        #0invalid,1space,2sign,3digit,4dot,5exponent,6num_inputs
        transitionTable=[[-1,  0,  3,  1,  2, -1],    #0 no input or just spaces
                        [-1,  8, -1,  1,  4,  5],    #1 input is digits
                        [-1, -1, -1,  4, -1, -1],    #2 no digits in front just Dot
                        [-1, -1, -1,  1,  2, -1],    #3 sign
                        [-1,  8, -1,  4, -1,  5],    #4 digits and dot in front
                        [-1, -1,  6,  7, -1, -1],    #5 input 'e' or 'E'
                        [-1, -1, -1,  7, -1, -1],    #6 after 'e' input sign
                        [-1,  8, -1,  7, -1, -1],    #7 after 'e' input digits
                        [-1,  8, -1, -1, -1, -1]]    #8 after valid input input space
        state=0; i=0
        while i < len(s):
            inputtype = INVALID
            if s[i]==' ': inputtype=SPACE
            elif s[i]=='-' or s[i]=='+': inputtype=SIGN
            elif s[i] in '0123456789': inputtype=DIGIT
            elif s[i]=='.': inputtype=DOT
            elif s[i]=='e' or s[i]=='E': inputtype=EXPONENT

            state=transitionTable[state][inputtype]
            if state==-1: return False
            else: i+=1
        return state == 1 or state == 4 or state == 7 or state == 8
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容