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.
Solution:
Use DFS and backtracking to fill each grid with a valid answer.
Code:
Solution:
Use DFS and backtracking to fill each grid with a valid answer.
Code:
public class Solution { public void solveSudoku(char[][] board) { if (board == null || board.length != 9) { return; } if (board[0] == null || board[0].length != 9) { return; } helper(board); } public boolean helper(char[][] board) { for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (board[i][j] != '.') { continue; } for (char num = '1'; num <= '9'; num++) { board[i][j] = num; if (isValid(board) && helper(board)) { return true; } board[i][j] = '.'; } return false; } } return true; } public boolean isValid(char[][] board) { HashSet<Character> set = new HashSet<>(); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (board[i][j] == '.') { continue; } if (set.contains(board[i][j])) { return false; } set.add(board[i][j]); } set.clear(); } for (int j = 0; j < 9; j++) { for (int i = 0; i < 9; i++) { if (board[i][j] == '.') { continue; } if (set.contains(board[i][j])) { return false; } set.add(board[i][j]); } set.clear(); } for (int k = 0; k < 9; k++) { for (int i = k / 3 * 3; i < k / 3 * 3 + 3; i++) { for (int j = (k % 3) * 3; j < (k % 3) * 3 + 3; j++) { if (board[i][j] == '.') { continue; } if (set.contains(board[i][j])) { return false; } set.add(board[i][j]); } } set.clear(); } return true; } }