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
};在 GitHub 上查看题目所在目录:lmliheng/algorithm