public void solveSudoku(char[][] board) {
if (board.length == 0 || board[0].length == 0) return;
solve(board);
}
private boolean solve(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 c = '1'; c <= '9'; c++) {
if (!isValid(board, i, j, c)) continue;
board[i][j] = c;
if (solve(board)) return true;
else board[i][j] = '.';
}
return false;
}
}
return true;
}
private boolean isValid(char[][] board, int row, int col, char c) {
for (int i = 0; i < 9; i++) {
if (board[row][i] == c) return false;
if (board[i][col] == c) return false;
int cellR = (row / 3) * 3 + i / 3;
int cellC = (col / 3) * 3 + i % 3;
if (board[cellR][cellC] == c) return false;
}
return true;
}
37. 解数独
最新推荐文章于 2022-03-31 12:58:54 发布