力扣-回溯-37 解数独
思路
双层递归,而且在传递参数使用&的好处是不用在复制一次样本,浪费时间
class Solution {
public:
bool isVaild(vector<vector<char>> &board, int row, int cal, char val){
for(int i = 0; i < 9;i++){
if(board[row][i] == val) return false;
}
for(int i = 0; i < 9;i++){
if(board[i][cal] == val) return false;
}
int startRow = (row/3) * 3;
int startCal = (cal/3) * 3;
for(int i = startRow; i < startRow+3;i++){
for(int j = startCal; j < startCal+3; j++ ){
if(board[i][j] == val) return false;
}
}
return true;
}
bool backTracking(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] == '.'){
for(char k = '1'; k <= '9'; k++){
if( isVaild(board, i, j, k)){
board[i][j] = k;
if(backTracking(board)) return true;
board[i][j] = '.';
}
}
return false;
}
}
}
return true;
}
void solveSudoku(vector<vector<char>>& board) {
backTracking(board);
}
};