/**
* @param {character[][]} board
* @return {boolean}
*/
var isValidSudoku = function(board) {
// 三个方向判重
const [rows, columns, boxes] = [{}, {}, {}];
// 遍历数独
for (let i = 0; i < 9; i++) {
for (let j = 0; j < 9; j++) {
const num = board[i][j];
if (num !== '.') {
// 子数独序号:0~8,一共9个
const boxIndex = parseInt(i / 3) * 3 + parseInt(j / 3);
// 如果当前数已经在某个位置出现过了,返回false(如果columns中已经存在键值对 2-9,那么只要出现3-9就可以认为同一行中存在2个9)
if (rows[i + '-' + num] || columns[j + '-' + num] || boxes[boxIndex + '-' + num]) {
return false;
}
// 三个方向上每个位置,将当前数做标记,表示出现过了
// 假如当前第三行第二列数字9,那么i = 2,j = 1.num = 9,就在row中存放一个对象 0-9: true,
// 就在columns中存放一个对象 2-9: true,就在boxes中存放一个对象 0-9: true
rows[i + '-' + num] = true;
columns[j + '-' + num] = true;
boxes[boxIndex + '-' + num] = true;
}
}
}
return true;
};
这个题目等级M,看代码好久才搞懂,,,,,?
|