65. 有效数字
- 题号:65
- 来源:LeetCode
- 难度:困难
- 标签:
字符串模拟 - 语言:TypeScript
- 解法:1 个
- 作者:lmliheng
- 最近更新:2026-09-27
TypeScript · O(n) 时间 · O(1) 空间 · 更新于 2026-09-27
状态机逐字符转移,终态须合法
typescript
/**
* @difficulty hard
* @tags 字符串,模拟
* @time O(n)
* @space O(1)
* @note 状态机逐字符转移,终态须合法
* @65. 有效数字
*/
/**
* @param {string} s
* @return {boolean}
*/
function isNumber(s: string): boolean {
const garph: Record<number, Record<string, number>> = {
0: { 'blank': 0, 'sign': 1, 'dot': 2, 'digit': 6 },
1: { 'digit': 6, 'dot': 2 },
2: { 'digit': 3 },
3: { 'digit': 3, 'e': 4 },
4: { 'digit': 5, 'sign': 7 },
5: { 'digit': 5 },
6: { 'dot': 3, 'e': 4, 'digit': 6 },
7: { 'digit': 5 },
}
let state: number = 0;
for (let c of s.trim()) {
if (c >= '0' && c <= '9') {
c = 'digit';
}
else if (c === ' ') {
c = 'blank';
}
else if (c === '+' || c === '-') {
c = 'sign';
}
else if (c === 'e' || c === 'E') {
c = 'e';
} else if (c === '.') {
c = 'dot';
}
state = garph[state][c];
if (state === undefined) {
return false;
}
}
if (state === 6 || state === 5 || state === 3) {
return true;
} else {
return false;
}
}
console.log(isNumber("0.1"))
export {};在 GitHub 上查看题目所在目录:lmliheng/algorithm