Skip to content

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

源码:ts/leetcode/65. 有效数字.ts


在 GitHub 上查看题目所在目录:lmliheng/algorithm