1 题目
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character ‘.’.
You may assume that there will be only one unique solution.
2 解法
public 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] == '.'){
for(char ch = '1'; ch <= '9'; ch++){
if(isValid(board, i, j, ch)){
board[i][j] = ch;
if(solve(board)){
return true;
}else{
board[i][j] = '.';
}
}
}
return false;
}
}
}
return true;
}
// check if it is valid or not to put ch in board.
public boolean isValid(char[][] board, int m, int n, char ch){
for(int j = 0; j < 9; j++){
if(board[m][j] == ch){
return false;
}
}
for(int i = 0; i < 9; i++){
if(board[i][n] == ch){
return false;
}
}
int row = m/3, col = n/3;
for(int i = row * 3; i < row * 3 + 3; i++){
for(int j = col * 3; j < col * 3 + 3; j++){
if(board[i][j] == ch){
return false;
}
}
}
return true;
}
}