Skip to content

36. 有效的数独 ​

  • 题号:36
  • 来源:LeetCode
  • 难度:中等
  • 标签:哈希表 矩阵 数组
  • 语言:TypeScript
  • 解法:1 个
  • 作者:lmliheng
  • 最近更新:2026-09-27

TypeScript · O(1) 时间 · O(1) 空间 · 更新于 2026-09-27

分三轮用集合校验行、列与九个宫格

typescript
/**
 * @difficulty medium
 * @tags 哈希表,矩阵,数组
 * @time O(1)
 * @space O(1)
 * @note 分三轮用集合校验行、列与九个宫格
 * @36. 有效的数独
 */
function isValidSudoku(board: string[][]): boolean {
    let row = board[0].length
    let col = board.length
    // row
    for (let i = 0; i < row; i++) {
        let row_set = new Set()
        for (let j = 0; j < col; j++) {
            if (board[i][j] === '.') {
                continue
            }
            if (!row_set.has(board[i][j])) {
                row_set.add(board[i][j])
            } else {
                return false
            }

        }

    }

    // col
    for (let i = 0; i < col; i++) {
        let col_set = new Set()
        for (let j = 0; j < row; j++) {
            if (board[j][i] === '.') {
                continue
            }
            if (!col_set.has(board[j][i])) {
                col_set.add(board[j][i])
            } else {
                return false
            }

        }

    }



    // 3*3
    let arr = [[0, 0], [0, 3], [0, 6], [3, 0], [3, 3], [3, 6], [6, 0], [6, 3], [6, 6]]
    for (let i = 0; i < arr.length; i++) {
        //arr[i]
        let set = new Set()
        for (let m = arr[i][0]; m < arr[i][0] + 3; m++) {
            for (let n = arr[i][1]; n < arr[i][1] + 3; n++) {
                if (board[m][n] === '.') {
                    continue
                }
                if (!set.has(board[m][n])) {
                    set.add(board[m][n])
                } else {
                    return false
                }


            }
        }
    }

    return true

};

源码:ts/leetcode/36. 有效的数独.ts


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