class Solution {
public void solveSudoku(char[][] board) {
backTracking(board);
}
boolean backTracking(char[][] board){
// 遍历行
for(int i=0; i<9; i++){
// 遍历列
for(int j=0; j<9; j++){
if(board[i][j]!='.'){
continue;
}
// 遍历可能的取值
for(char k = '1'; k <= '9'; k++){
if(isValid(i,j,k,board)){
board[i][j] = k;
boolean result = backTracking(board);
if(result){
return true;
}
board[i][j] = '.';
}
}
return false;
}
}
return true;
}
public boolean isValid(int row,int col,char k,char[][] board){
// 验证同行
for(int i=0; i<9; i++){
if(board[row][i]==k){
return false;
}
}
// 验证同列
for(int j=0; j<9; j++){
if(board[j][col]==k){
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]==k){
return false;
}
}
}
return true;
}
}
力扣37题 解数独 Java版
最新推荐文章于 2024-06-05 15:38:12 发布