| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | 
							- class Solution {
 
-     // Numbers 0-9
 
-     // Exponent - "e"
 
-     // Positive/negative sign - "+"/"-"
 
-     // Decimal point - "."
 
-     public boolean isNumber(String s) {
 
-         // Finite automaton
 
-         // State No. | Discription
 
-         // ----------+------------
 
-         //    -1     | Invalid state
 
-         //     0     | Initial state
 
-         //     1     | Input sign
 
-         //     2     | Input digit
 
-         //     3     | Input dot
 
-         //     4     | Input digit and dot (like .33 or 33. or 3.3)
 
-         //     5     | Input exp
 
-         //     6     | Input sign after exp
 
-         //     7     | Input digit after exp
 
-         //     8     | Input space after valid number
 
-         // Input state:
 
-         // ERROR, SPACE, SIGN, DIGIT, DOT, EXP
 
-         // Trans table:
 
-         //     \input| ERR SPA SGN DIG DOT EXP
 
-         // state\    |
 
-         // ----------+------------------------
 
-         //      0    |  -1   0   1   2   3  -1
 
-         //      1    |  -1  -1  -1   2   3  -1
 
-         //      2    |  -1   8  -1   2   3   5
 
-         //      3    |  -1  -1  -1   4  -1   5
 
-         //      4    |  -1   8  -1   4  -1   5
 
-         //      5    |  -1  -1   6   7  -1  -1
 
-         //      6    |  -1  -1  -1   7  -1  -1
 
-         //      7    |  -1   8  -1   7  -1  -1
 
-         //      8    |  -1   8  -1  -1  -1  -1
 
-         char[] num = s.toCharArray();
 
-         int[][] stateTable = new int[][] {
 
-             {-1,  0,  1,  2,  3, -1}, // 0
 
-             {-1, -1, -1,  2,  3, -1}, // 1
 
-             {-1,  8, -1,  2,  4,  5}, // 2
 
-             {-1, -1, -1,  4, -1, -1}, // 3
 
-             {-1,  8, -1,  4, -1,  5}, // 4
 
-             {-1, -1,  6,  7, -1, -1}, // 5
 
-             {-1, -1, -1,  7, -1, -1}, // 6
 
-             {-1,  8, -1,  7, -1, -1}, // 7
 
-             {-1,  8, -1, -1, -1, -1}  // 8
 
-         };
 
-         int state = 0;
 
-         for (int i = 0; i < num.length; i++) {
 
-             int input = 0; // ERROR
 
-             if (num[i] == ' ') input = 1; // SPACE
 
-             else if (num[i] == '+' || num[i] == '-') input = 2; // SIGN
 
-             else if ('0' <= num[i] && num[i] <= '9') input = 3; // DIGIT
 
-             else if (num[i] == '.') input = 4; // DOT
 
-             else if (num[i] == 'e' || num[i] == 'E') input = 5; // EXP
 
-             state = stateTable[state][input];
 
-             if (state == -1) return false;
 
-         }
 
-         return state == 2 || state == 4 || state == 7 || state == 8;
 
-     }
 
- }
 
 
  |