36.Valid Sudoku

题目链接

题目大意:输入一个含有部分数据的数独数组,查验是否这个数组中的数是否满足数独条件,即行、列、小3*3框没有重复数值。37题是构造数独解。

法一:直接逐一判断即可。代码如下(耗时20ms):

 1     public boolean isValidSudoku(char[][] board) {
 2         for(int i = 0; i < 9; i++) {
 3             for(int j = 0; j < 9; j++) {
 4                 if(check(i, j, board) == false) {
 5                     return false;
 6                 }
 7             }
 8         }
 9         return true;
10     }
11     private boolean check(int x, int y, char[][] board) {
12         if(board[x][y] != '.') {
13             for(int i = 0; i < 9; i++) {
14                 //判断行
15                 if(i != y && board[x][i] == board[x][y]) {
16                     return false;
17                 }
18                 //判断列
19                 if(i != x && board[i][y] == board[x][y]) {
20                     return false;
21                 }
22             }
23         }
24         x = x / 3 * 3;
25         y = y / 3 * 3;
26         HashSet<Character> set = new HashSet<Character>();
27         //判断3*3的框
28         for(int i = x; i < x + 3; i++) {
29             for(int j = y; j < y + 3; j++) {
30                 if(board[i][j] != '.') {
31                     if(set.contains(board[i][j])) {
32                         return false;
33                     }
34                     else {
35                         set.add(board[i][j]);
36                     }
37                 }
38             }
39         }
40         return true;
41     }
View Code

猜你喜欢

转载自www.cnblogs.com/cing/p/9339947.html
今日推荐