题目描述:
请编写一个程序,给数独中的剩余的空格填写上数字
空格用字符'.'表示
解题思路:
- 这一题与上一题大同小异
- 只是小矩阵的求解变了
代码如下:
public class Solution {
public void solveSudoku(char[][] board) {
solveSudoDFS(board,0,0);
}
boolean solveSudoDFS(char [][] board, int i, int j){
if(i == 9) return true;
if(j >= 9) return solveSudoDFS(board, i + 1, 0);
if(board[i][j] == '.'){
for(int k = 1; k <= 9; k++){
board[i][j] = (char)(k + '0');
if(isVaild(board, i,j)){
if(solveSudoDFS(board,i,j + 1))
return true;
}
board[i][j] = '.';
}
}
else
return solveSudoDFS(board,i, j + 1);
return false;
}
boolean isVaild(char [][] board, int i, int j){
for(int col = 0; col < 9; col++){
if(col != j && board[i][j] == board[i][col])
return false;
}
for(int row = 0; row < 9; row++){
if(row != i && board[i][j] == board[row][j])
return false;
}
// 由当前的元素求的是当前元素所在的小矩阵的所有元素的位置范围
for(int row = i / 3 * 3; row < i / 3 * 3 + 3; row++){
for(int col = j / 3 * 3; col < j / 3 * 3 + 3; col++ ){
if((row != i || col != j) && board[i][j] == board[row][col])
return false;
}
}
return true;
}
}