Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.'
.
You may assume that there will be only one unique solution.
A sudoku puzzle...
...and its solution numbers marked in red.
解数独对每个空格进行深搜,赋值1-9,并判断该空是否合理
public class Solution {
public boolean isVaild(char[][] board, int row, int col) {
for (int i = 0; i < 9; i++) { //判断在该行中是否存在
if (row != i && board[i][col] == board[row][col])
return false;
}
for (int i = 0; i < 9; i++) { //判断在该列中是否存在
if (col != i && board[row][i] == board[row][col])
return false;
}
int a = row / 3 * 3;
int b = col / 3 * 3;
for (int i = a; i < a + 3; i++) { //判断在该块中是否存在
for (int j = b; j < b + 3; j++) {
if (row != i && col != j && board[i][j] == board[row][col])
return false;
}
}
return true;
}
public boolean solveSudoku(char[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (board[i][j] == '.'){
for (int k = 1; k < 10; k++) {
board[i][j] = (char) (k + '0');
if (isVaild(board, i, j) && solveSudoku(board))
return true;
board[i][j] = '.';
}
return false;
}
}
}
return true;
}
}