Write a program to solve a Sudoku puzzle by filling the empty cells.
A sudoku solution must satisfy all of the following rules:
- Each of the digits
1-9
must occur exactly once in each row. - Each of the digits
1-9
must occur exactly once in each column. - Each of the the digits
1-9
must occur exactly once in each of the 93x3
sub-boxes of the grid.
Empty cells are indicated by the character '.'
.
A sudoku puzzle...
...and its solution numbers marked in red.
Note:
- The given board contain only digits
1-9
and the character'.'
. - You may assume that the given Sudoku puzzle will have a single unique solution.
- The given board size is always
9x9
.
题解如下:
回溯法的典型例题
class Solution {
public void solveSudoku(char[][] board) {
if(board == null)
return;
solve(board);
}
public boolean solve(char[][] board) {
for(int i = 0;i < 9;i++) {
for(int j = 0;j < 9;j++) {
if(board[i][j] == '.') {
//can fill
for(char num = '1';num <= '9';num++) {
if(isValid(board,i,j,num)) {
board[i][j] = num;
if(solve(board))
return true;
board[i][j] = '.';
}
}
return false;
}
}
}
return true;
}
public boolean isValid(char[][] board,int row,int col,char c){
//检测行
for(int i = 0;i < 9;i++) {
if(board[row][i] == c)
return false;
}
//检测列
for(int i = 0;i < 9;i++) {
if(board[i][col] == c) {
return false;
}
}
//检测小九宫格
for(int i = 0;i < 9;i++) {
if(board[3*(row/3)+i/3][3*(col/3)+i%3] == c)
return false;
}
return true;
}
}