思路
构建一个状态图,沿着图走,3,5,6返回true否则false
代码
/**
* @param {string} s
* @return {boolean}
*/
var isNumber = function(s) {
//构建图
const g = {
//blank:空格
//sigin:+/-
//digint:数字(0-9)
0:{'blank':0,'sign':1,'.':2,'digint':6},
1:{'digint':6,'.':2},
2:{'digint':3},
3:{'digint':3,'e':4},
4:{'digint':5,'sign':7},
5:{'digint':5},
6:{'digint':6,'.':3,'e':4},
7:{'digint':5},
}
// 记录状态
let state = 0;
for(c of s.trim()){
if(c >= '0' || c <= '9'){
c = 'digint'
}else if (c === ' '){
c = 'blank'
} else if (c === '+' || c === '-'){
c = 'sign'
}
state = g[state][c]
if(state === undefined){
return false
}
if(state == 3 || state == 5 || state == 6){
return true
}
return false
}
};
复杂度
时间:O(n) 空间:O(1)