DFS+回溯法
提交代码:
class Solution {
public void solveSudoku(char[][] board) {
if (board == null || board.length == 0)
return;
fillBoard(board);
}
public boolean fillBoard(char[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] == '.') {
for (char num = '1'; num <= '9'; num++) {
if (isValid(board, i, j, num)) {
board[i][j] = num;
if (fillBoard(board))
return true;
else
board[i][j] = '.';
}
}
return false;
}
}
}
return true;
}
public boolean isValid(char[][] board, int row, int column, char num) {
int i, j;
// check row
for (j = 0; j < 9; j++)
if (j != column && board[row][j] == num)
return false;
// check column
for (i = 0; i < 9; i++)
if (i != row && board[i][column] == num)
return false;
// check sub block
for (i = row / 3 * 3; i < row / 3 * 3 + 3; i++)
for (j = column / 3 * 3; j < column / 3 * 3 + 3; j++)
if ((i != row || j != column) && board[i][j] == num)
return false;
return true;
}
}
运行结果: