-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path65_Valid_Number.py
32 lines (30 loc) · 1.13 KB
/
65_Valid_Number.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution:
def isNumber(self,s):
INVALID=0; SPACE=1;SIGN=2;DIGIT=3;DOT=4;EXPONENT=5;
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
if __name__=="__main__":
print Solution().isNumber('1235')
print Solution().isNumber('*.12')
print Solution().isNumber('.01')
print Solution().isNumber('1e10')
print Solution().isNumber('..3')