class Solution {
public:
//竖着x横着y
void solveSudoku(vector<vector<char>>& board) { rb(board); }
bool rb(vector<vector<char>>& board) {
for(int i = 0;i<9;i++){
for(int j = 0;j<9;j++){
if(board[i][j]=='.'){
for(char c = '1';c<='9';c++){
if(!isValid(board,i,j,c))continue;
board[i][j] = c;
if(rb(board))return true;
board[i][j] = '.';
}
return false;
}
}
}
return true;
}
bool isValid(vector<vector<char>>& board, int x, int y, char val) {
// 横着不重复
for (int i = 0; i < 9; i++) {
if (board[x][i] == val)
return false;
}
// 竖着不重复
for (int i = 0; i < 9; i++) {
if (board[i][y] == val)
return false;
}
// 九宫格不重复
x = (x / 3) * 3;
y = (y / 3) * 3;
for (int i = x; i < x + 3; i++) {
for (int j = y; j < y + 3; j++) {
if (board[i][j] == val)
return false;
}
}
return true;
}
};