Friday, September 19, 2014

Leetcode: Valid Number @Python

Finite State Machine Solution:
class Solution:
    # @param s, a string
    # @return a boolean
    def isNumber(self, s):
        s=s.rstrip(' ')
        s=s.lstrip(' ')
        trans=[[1,2,3,-1], #state 0:start
               [1,-1,7,4], #state 1:digit
               [1,-1,3,-1], #state 2: +/-
               [7,-1,-1,-1], #state 3:.dot
               [5,6,-1,-1],  #state 4:e/E
               [5,-1,-1,-1], #state 5: exponent
               [5,-1,-1,-1], #state 6: exponent+/-
               [7,-1,-1,4]] #state 7: .digits
        state=0
        for char in s:
            if char in '0123456789':
                inputs=1
            elif char in '+-':
                inputs=2
            elif char=='.':
                inputs=3
            elif char in 'eE':
                inputs=4
            else:
                return False
            state=trans[state][inputs-1]
            if state==-1:return False
        if state==1 or state==5 or state==7:
            return True
        else:
            return False
You can use the following code to find all corner cases. Cheat Code:

class Solution:
    # @param s, a string
    # @return a boolean
    def isNumber(self, s):
        try:
            float(s)                 # If error is shown then print False else True
            return True                
        except:
            return False

No comments :

Post a Comment