使用递归
class Solution {
public:
bool check(vector<vector<char>>& board,int i,int j,char num)//检查Num 数字加入是否冲突
{
for(int k=0;k<9;k++)
{
if (board[i][k]==num)
return false;
if(board[k][j]==num)
return false;
}
for (int k=0;k<3;k++)
for(int c=0;c<3;c++)
if(board[(i/3)*3+k][(j/3)*3+c]==num)
return false;
return true;
}
bool solve(vector<vector<char>>& board,int i,int j)
{
if(i==9) return true;//对ij 值进行判断
if (j==9) return solve(board,i+1,0);//注意这里使用返回
if(board[i][j]!='.')
return solve(board,i,j+1);
for(char num='1';num<='9';num++)
{
if(check(board,i,j,num))
{
board[i][j]=num;
if(solve(board,i,j+1))
return true;
else
board[i][j]='.'; //回到上一层要复原原数组
}
}
return false;
}
void solveSudoku(vector<vector<char>>& board) {//这个数组是引用
solve(board,0,0);
}
};