思路
依次枚举每个空位的1-9,如果有重复则换一个数字,没重复继续下一个位置。
class Solution {
public:
bool isValid(int row,int col,char t,vector<vector<char>>& board){
for(int i=0;i<9;i++){
if(board[row][i]==t)return false;
}
for(int i=0;i<9;i++){
if(board[i][col]==t)return false;
}
int startRow=row/3*3;
int startCol=col/3*3;
for(int i=startRow;i<startRow+3;i++){
for(int j=startCol;j<startCol+3;j++){
if(board[i][j]==t)return false;
}
}
return true;
}
bool dfs(vector<vector<char>>& board){
for(int i=0;i<board.size();i++){
for(int j=0;j<board[0].size();j++){
if(board[i][j]!='.')continue;
for(char c='1';c<='9';c++){
if(isValid(i,j,c,board)){
board[i][j]=c;
if(dfs(board))return true;
board[i][j]='.';
}
}
return false;
}
}
return true;
}
void solveSudoku(vector<vector<char>>& board) {
dfs(board);
}
};