判断一个 9 x 9 的数独是否有效。只需要根据以下规则, 验证已经填入的数字是否有效即可
。
1.数字 1 - 9 在每一行只能出现一次。 2.数字 1 - 9 在每一列只能出现一次。 3.数字 1 - 9 在每一个以粗实线分隔的 3 x 3 宫内只能出现一次。
示例 1:
输入:[["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]输出: true
示例 2:
输入:[["8","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]输出: false
解释: 除了第一行的第一个数字从 5 改为 8 以外, 空格内其他数字均与示例 1 相同。 但由于位于左上角的 3 x 3 宫内有两个 8 存在, 因此这个数独是无效的。
说明:
依次遍历二维数组, 对 3 种情况分别进行校验。
/*** @param {character[][]} board* @return {boolean}*/var isValidSudoku = function (board) {const set = new Set()for (let x = 0; x < 9; x++) {for (let y = 0; y < 9; y++) {const num = board[x][y]if (num !== '.') {if (set.has(`row ${x} ${num}`)|| set.has(`col ${y} ${num}`)|| set.has(`block ${Math.floor(x / 3)} ${Math.floor(y / 3)} ${num}`)) {return false} else {set.add(`row ${x} ${num}`)set.add(`col ${y} ${num}`)set.add(`block ${Math.floor(x / 3)} ${Math.floor(y / 3)} ${num}`)}}}}return true};