leetcode 36题“Valid Sudoku”,描述如下
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character ‘.’.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
这道题是数独问题,规则很简单每个九宫格每行每列不能有重复数字,比较笨的方法是分开遍历3次,每次分别解决行、列、九宫格的问题。比较好的解决方式只需要一次遍历如下:
/**
* @param {character[][]} board
* @return {boolean}
*/
var isValidSudoku = function(board) {
var a = new Array(9),
b = new Array(9),
c = new Array(9);
for (var k = 0; k < 9; k++) {
a[k] = new Array(9);
b[k] = new Array(9);
c[k] = new Array(9);
}
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
var temp = board[i][j];
if (temp === ".") {
continue;
}
if (a[i][temp - 1] || b[temp - 1][j] || c[Math.floor(i / 3) * 3 + Math.floor(j / 3)][temp - 1]) {
return false;
}
a[i][temp - 1] = b[temp - 1][j] = c[Math.floor(i / 3) * 3 + Math.floor(j / 3)][temp - 1] = true;
}
}
return true;
};