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.
A sudoku puzzle...
...and its solution numbers marked in red.
uncompleted.
public class Solution {
ArrayList<HashSet<Character>> line;
ArrayList<HashSet<Character>> col;
ArrayList<HashSet<Character>> square;
int sz;
public void solveSudoku(char[][] board) {
// Start typing your Java solution below
// DO NOT write main() function
sz = board.length;
ArrayList<HashSet<Character>> line = new ArrayList<HashSet<Character>>();
ArrayList<HashSet<Character>> col = new ArrayList<HashSet<Character>>();
ArrayList<HashSet<Character>> square = new ArrayList<HashSet<Character>>();
for(int i=0; i<9; i++) {
line.add( new HashSet<Character>());
col.add( new HashSet<Character>());
square.add( new HashSet<Character>());
}
int count=0;
for(int i=0; i<sz; i++) {
for(int j=0; j<sz; j++) {
if(board[i][j] != '.') {
++count;
line.get(i).add( board[i][j] );
col.get(i).add( board[i][j] );
square.get((i/3)*3+j%3).add( board[i][j]);
}
}
}
sudokuRec(board, 0);
}
private void sudokuRec(char[][] board, int level){
if(level== sz*sz) {
return;
}
for(int l=level; l<sz*sz;l++) {
int i=level/sz;
int j=level%sz;
if(board[i][j]=='.') {
for(char k='1';k<='9';k++){
if(!line.get(i).contains(k) && !col.get(j).contains(k) && !square.get((i/3)*3+j%3).contains(k) ){
board[i][j]=k;
line.get(i).add(k);
col.get(j).add(k);
square.get((i/3)*3+j/3).add(k);
sudokuRec(board,l+1);
line.get(i).remove(k);
col.get(j).remove(k);
square.get((i/3)*3+j/3).remove(k);
board[i][j]='.';
}
}
}
}
}
}