网址
题目
解决数独
解法
- 回溯法
class Solution {
public void solveSudoku(char[][] board) {
solve(board);
}
private boolean solve(char[][] board) {
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
if(board[i][j] == '.'){
char cur = '1';
while(cur <= '9'){
if(valid(i, j, cur, board)){
board[i][j] = cur;
if(solve(board)){
return true;
}else{
board[i][j] = '.';
}
}
cur++;
}
return false;
}
}
}
return true;
}
private boolean valid(int a, int b, char number, char[][] board){
int c = a/3*3, d = b/3*3;
for(int i = 0; i < 9; i++){
int del_c = i / 3, del_d = i % 3;
if(board[a][i] == number || board[i][b] == number || board[c+del_c][d+del_d] == number){
return false;
}
}
return true;
}
}