题目链接:
因为我也还没有完全理解这道题,所以不能写出详细的解答过程以及理解的思路。就先贴代码吧!
代码:
public void solveSudoku(char[][] board) { search(board); } private boolean search(char[][] board){ for (int i = 0; i < board.length; i++){ for (int j = 0; j < board[0].length; j++){ if (board[i][j] != '.') // 只有是 .号,也就是空格,我们才能填充数据 continue; for (char ch = '1'; ch <= '9'; ch++){ // 在board[i][j]中填充 0~9 来测试填入数据后board是否还是一个数独 if (!isValid(board, i, j, ch)){ continue; } board[i][j] = ch; if (search(board)){ return true; }else { board[i][j] = '.'; } } return false; } } return true; } private boolean isValid(char[][] board, int i, int j, char ch) { // 行不重复 for (int col = 0; col < 9; col++){ if (board[i][col] == ch){ return false; } } // 列不重复 for (int row = 0; row < 9; row++){ if (board[row][j] == ch){ return false; } } // 3 X 3的小方格不重复 for (int row = i / 3 * 3; row < i / 3 * 3 + 3; row++){ for (int col = j / 3 * 3; col < j / 3 * 3 + 3; col++){ if (board[row][col] == ch){ return false; } } } return true; }