1 /**
2 * @param {string} s
3 * @return {boolean}
4 */
5 var isNumber = function (s) {
6 const graph = {
7 0: { 'blank': 0, '.': 2, 'digit': 6, 'sign': 1 },
8 1: { 'digit': 6, '.': 2 },
9 2: { 'digit': 3 },
10 3: { 'digit': 3, 'e': 4, 'E': 4 },
11 4: { 'digit': 5, 'sign': 7 },
12 5: { 'digit': 5 },
13 6: { 'digit': 6, '.': 3, 'e': 4, 'E': 4 },
14 7: { 'digit': 5 }
15 };
16
17 let state = 0;
18
19 for (c of s.trim()) {
20 //转换字符
21 if (c >= 0 && c <= 9) {
22 c = 'digit'
23 } else if (c === ' ') {
24 c = 'blank'
25 } else if (c === '+' || c === '-') {
26 c = 'sign';
27 }
28 //切换状态
29 state = graph[state][c]
30 if (state === undefined) {
31 return false
32 }
33 }
34 if (state === 3 || state === 6 || state === 5) {
35 return true
36 }
37 return false
38 };