36. Valid Sudoku
根据条件判断,在不为空的格子中,同一列没有相同的元素,同一行没有相同的元素,同一个subgrid没有一样的元素。特别注意边界的取值范围。
public boolean isValidSudoku(char[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] != '.') { // is not empty
// same element in the same col
for (int curX = 0; curX < board.length; curX++) {
if (curX != i && board[curX][j] == board[i][j]) return false;
}
// same element in the same row
for (int curY = 0; curY < board.length; curY++) {
if (curY != j && board[i][curY] == board[i][j]) return false;
}
// same element in the same subgrid
for (int curX = 3 * (i / 3); curX < 3 * (i / 3 + 1); curX++) {
for (int curY = 3 * (j / 3); curY < 3 * (j / 3 + 1); curY++) {
if (curX != i && curY != j && board[curX][curY] == board[i][j]) {
return false;
}
}
}
}
}
}
return true;
}