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')
