思路:暴力搜索,对行和列和3*3方格数字使用状态存入数组中,方便查找
class Solution {
public void solveSudoku(char[][] board) {
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
if(board[i][j]!='.')
{
int num=board[i][j]-'1';
row[i][num]=true;
col[num][j]=true;
gon[i/3*3+j/3][num]=true;
}
}
}
dfs(0,0,board);
}
boolean [][]row=new boolean[9][9];//行
boolean [][]col=new boolean[9][9];//列
boolean [][]gon=new boolean[9][9];//3*3宫内
boolean dfs(int x,int y,char[][]board)
{
if(y==9)
{
y=0;x++;
if(x==9)
return true;
}
if(board[x][y]!='.')
return dfs(x,y+1,board);
for(int i=0;i<9;i++)
{
if(!row[x][i] && !col[i][y] && !gon[x/3*3+y/3][i])
{
row[x][i]=true;
col[i][y]=true;
gon[x/3*3+y/3][i]=true;
board[x][y]=(char)('1'+i);
if(dfs(x,y+1,board))
return true;
board[x][y]='.';
row[x][i]=false;
col[i][y]=false;
gon[x/3*3+y/3][i]=false;
}
}
return false;
}
}