题目:
题目截图:
解题步骤:
1.构建一个表示状态的图,0-7一共表示8种状态,3/5/6是合法状态
2.遍历字符串,并沿着图走,如果到了某个节点无路可走就返回false
3.遍历结束,如走到3/5/6,就返回true,否则返回false
代码:
/**
* @param {string} s
* @return {boolean}
*/
var isNumber = function (s) {
const graph = {
0: { 'blank': 0, 'sign': 1, '.': 2, 'digit': 6 },
1: { 'digit': 6, '.': 2 },
2: { 'digit': 3 },
3: { 'digit': 3, 'e': 4 },
4: { 'digit': 5, 'sign': 7 },
5: { 'digit': 5 },
6: { 'digit': 6, '.': 3, 'e': 4 },
7: { 'digit': 5 }
};
let state = 0;
for (c of s.trim()) {
if (c >= '0' && c <= '9') {
c = 'digit';
} else if (c === ' ') {
c = 'blank';
} else if (c === '+' || c === '-') {
c = 'sign';
}
state = graph[state][c];
if (state === undefined) return false;
// 上面这一行表示无路可走了,则返回false
}
// 遍历结束后,如果状态是3/5/6,就表示可以
if (state === 3 || state === 5 || state === 6) return true;
// 否则的话,表示状态不是3/5/6,则返回false
return false;
};
时间复杂度分析:
时间复杂度是O(n),n是去除前后空格后字符串的长度
空间复杂度分析:
空间复杂度是O(1)
怎么样,是不是很简单,你学会了吗 ?
如果这篇文章能够帮助到您,希望您不要吝惜点赞👍👍和收藏💖💖,您的支持是我继续努力的动力 💪💪 !!!