Valid Sudoku

来源:互联网 发布:关机命令linux 编辑:程序博客网 时间:2024/06/05 19:05

1.题目

请判定一个数独是否有效。

该数独可能只填充了部分数字,其中缺少的数字用 . 表示。

下列就是一个合法数独的样例。

2.算法

用暴力方发,检测每一行,每一列,每个单元格是否合法

public class Dept {public boolean isValidSudoku(char[][] board) {if (board == null || board.length != 9 || board[0].length != 9) {return false;}//检测行for (int i = 0; i < 9; i++) {boolean[] map = new boolean[9];for (int j = 0; j < 9; j++) {if (board[i][j] != '.') {if (map[(int) (board[i][j] - '1')]) {return false;}map[(int) (board[i][j] - '1')] = true;}}}//检测列for (int i = 0; i < 9; i++) {boolean[] map = new boolean[9];for (int j = 0; j < 9; j++) {if (board[j][i] != '.') {if (map[(int) (board[j][i] - '1')]) {return false;}map[(int) (board[j][i] - '1')] = true;}}}//检测单元格for (int block = 0; block < 9; block++) {boolean[] map = new boolean[9];for (int i = block / 3 * 3; i < block / 3 * 3 + 3; i++) {for (int j = block % 3 * 3; j < block % 3 * 3 + 3; j++) {if (board[j][i] != '.') {if (map[(int) (board[j][i] - '1')]) {return false;}map[(int) (board[j][i] - '1')] = true;}}}}return true;}


0 0