判断一个 的数独是否有效,根据以下规则,验证填入的数字是否有效。
- 数字 1-9 在每一行只能出现一次
- 数字 1-9 在每一列只能出现一次
- 数字 1-9 在每一个粗实线分隔的 3 x 3 宫格内只能出现一次
输入是一个二维数组,非空格已填入字符串数字,空格用'.'
表示。
- 时间复杂度O(1),空间复杂度O(1)
- Runtime: 104 ms, faster than 62.09%
- Memory Usage: 40.2 MB, less than 99.38%
/**
* @param {character[][]} board
* @return {boolean}
*/
var isValidSudoku = function(board) {
for(let i = 0; i < 9; i++) {
if(!isBlockValid(i, i, 0, 8, board)) return false
}
for(let i = 0; i < 9; i++) {
if(!isBlockValid(0, 8, i, i, board)) return false
}
for(let i = 0; i < 9; i = i + 3) {
for(let j = 0; j < 9; j = j + 3) {
if(!isBlockValid(i, i + 2, j, j + 2, board)) return false
}
}
return true
};
var isBlockValid = function(rs, re, cs, ce, board) {
let map = new Map()
for(let i = rs; i <= re; i++) {
for(let j = cs; j <= ce; j++) {
const item = board[i][j]
if(item !== '.') {
if(map.has(item)) {
return false
}
else map.set(item, 1)
}
}
}
return true
}