力扣算法学习day22-3
37-解数独
题目
![image-20220211235456610](https://img-blog.csdnimg.cn/img_convert/ff9b070363394e437709cc08ae7f987e.png)
![image-20220211235523650](https://img-blog.csdnimg.cn/img_convert/cd5621e8b091fffd1eff27672dc3d0ee.png)
![image-20220211235549028](https://img-blog.csdnimg.cn/img_convert/73f160678980fe90455e2139926f2905.png)
![image-20220211235607547](https://img-blog.csdnimg.cn/img_convert/7d0bd76db2bf7289d720dc9d3bb9ee0e.png)
代码实现
class Solution {
public void solveSudoku(char[][] board) {
recall(0,board);
}
public boolean recall(int index1,char[][] board){
for(int i = index1;i < 9;i++){
for(int j = 0;j < 9;j++){
if(board[i][j] != '.'){
continue;
}
for(char z = '1';z <= '9';z++){
if(judge(i,j,z,board)){
board[i][j] = z;
if(recall(i,board)){
return true;
}
board[i][j] = '.';
}
}
return false;
}
}
return true;
}
public boolean judge(int index1,int index2,char z,char[][] board){
for(int i = 0;i < 9;i++){
if(board[index1][i] == z){
return false;
}
}
for(int i = 0;i < 9;i++){
if(board[i][index2] == z){
return false;
}
}
int row = (index2 / 3) * 3;
int col = (index1 / 3) * 3;
for(int i = col;i < col+3;i++){
for(int j = row;j < row+3;j++){
if(board[i][j] == z){
return false;
}
}
}
return true;
}
}
代码随想录 回溯总结篇 完成