| 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;    }}
 |