class Solution { char[][] BOARD; boolean isValid(int row, int col, char num) { for (int i = 0; i < 9; i++) { if (BOARD[i][col] == num) return false; if (BOARD[row][i] == num) return false; } row = row - row % 3; col = col - col % 3; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) if (BOARD[i + row][j + col] == num) return false; return true; } int[] nextEmpty() { for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) if (BOARD[i][j] == '.') return new int[] { i, j }; return new int[] { -1, -1 }; } boolean solver() { int[] tmp = nextEmpty(); if (tmp[0] == -1) return true; int row = tmp[0]; int col = tmp[1]; for (int i = 1; i <= 9; i++) { if (isValid(row, col, (char) (48 + i))) { BOARD[row][col] = (char) (48 + i); if (solver()) return true; } BOARD[row][col] = '.'; } return false; } public void solveSudoku(char[][] board) { BOARD = board; solver(); } }