public class Solution {
private char[][] board;
public void solveSudoku(char[][] board) {
this.board=board;
dfs();
}
public boolean dfs(){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]!='.') continue;
for(int x=1;x<=9;x++){
if(check(i,j,x)){
board[i][j]=(char)('0'+x);
if(dfs()) return true;
board[i][j]='.';
}
}
return false;
}
}
return true;
}
public boolean check(int i,int j,int x){
for(int k=0;k<9;k++){
if(board[i][k]=='0'+x) return false;
if(board[k][j]=='0'+x) return false;
}
i/=3;
j/=3;
for(int c=i*3;c<i*3+3;c++){
for(int d=j*3;d<j*3+3;d++){
if(board[c][d]=='0'+x) return false;
}
}
return true;
}
}