classSolution{publicintmake(char c){switch(c){case' ':return0;case'+':case'-':return1;case'.':return3;case'e':return4;default:if(c >=48&& c <=57)return2;}return-1;}publicbooleanisNumber(String s){int state =0;int finals =0b101101000;//16进制的360int[][] transfer =newint[][]{{0,1,6,2,-1},{-1,-1,6,2,-1},{-1,-1,3,-1,-1},{8,-1,3,-1,4},{-1,7,5,-1,-1},{8,-1,5,-1,-1},{8,-1,6,3,4},{-1,-1,5,-1,-1},{8,-1,-1,-1,-1}};char[] ss = s.toCharArray();for(int i=0; i < ss.length;++i){int id =make(ss[i]);if(id <0)returnfalse;
state = transfer[state][id];if(state <0)returnfalse;}//为了1向右位移,若移位到的数对于return(finals &(1<< state))>0;}}