思路
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4819818e5a079b83aafb4d71987d3b56.jpeg)
代码
public class Solution0037 {
private boolean row[][]=new boolean[9][10];
private boolean col[][]=new boolean[9][10];
private boolean sqr[][][]=new boolean[3][3][10];
public void solveSudoku(char[][] board) {
for(int i=0;i<9;i++) {
for(int j=0;j<9;j++) {
if(board[i][j]!='.') {
row[i][board[i][j]-'0']=true;
col[j][board[i][j]-'0']=true;
sqr[i/3][j/3][board[i][j]-'0']=true;
}
}
}
backtrack(0,0,board);
return;
}
public boolean backtrack(int i,int j,char[][] board) {
if(j==board[0].length) {
j=0;
i++;
}
if(i==board.length)
return true;
if(board[i][j]=='.') {
for(int num=1;num<=9;num++) {
boolean flag=row[i][num]||col[j][num]||sqr[i/3][j/3][num];
if(!flag) {
row[i][num]=true;
col[j][num]=true;
sqr[i/3][j/3][num]=true;
board[i][j]=(char) (num+'0');
if (backtrack(i,j+1,board))
return true;
row[i][num]=false;
col[j][num]=false;
sqr[i/3][j/3][num]=false;
board[i][j]='.';
}
}
}
else
return backtrack(i,j+1,board);
return false;
}
}