LeetCode刷题记录-36

 

 

 

 

 

 这题的思路也比较清晰,三个判断规则内部的逻辑都是相同的,可以提取出来做成一个单独的方法:boolean check(char[] chars)

题目有“只能出现一次”这种字眼,一般都要用到哈希表,这里的boolean check(char[] chars)刚好可以用到

 1 private static boolean check(char[] chars) {
 2         HashSet<Character> set = new HashSet<>();
 3         for (int i = 0; i < chars.length; i++) {
 4             //'.'不能进入判断
 5             if (chars[i] != '.') {
 6                 if (!set.contains(chars[i])) {
 7                     set.add(chars[i]);
 8                 } else {
 9                     return false;
10                 }
11             }
12         }
13         return true;
14     }
15 
16  public static boolean isValidSudoku(char[][] board) {
17         //检查:数字 1-9 在每一行只能出现一次。
18         for (int i = 0; i < board.length; i++) {
19             if (check(board[i]) == false) {
20                 return false;
21             }
22         }
23         //检查:数字 1-9 在每一列只能出现一次。
24         char[] tmp = new char[9];
25         for (int i = 0; i < 9; i++) {
26             for (int j = 0; j < 9; j++) {
27                 tmp[j] = board[j][i];
28             }
29             if (check(tmp) == false) {
30                 return false;
31             }
32         }
33         //检查:数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
34         //三行三列
35         for (int i = 0; i < 3; i++) {
36             //第i行,第j列的3*3宫
37             for (int j = 0; j < 3; j++) {
38                 //接着遍历3*3宫内部所有元素
39                 //定位左上角元素的坐标(x,y),取值如下
40                 //0,0;0,3;0,6;
41                 //3,0;3,3;3,6;
42                 //6,0;6,3;6,6;
43                 //填充tmp[]数组的光标
44                 int index=0;
45                 int x = i * 3, y = j * 3;
46                 for (int k = x; k < x+3; k++) {
47                     for (int l = y; l < y+3; l++) {
48                         tmp[index++]=board[k][l];
49                     }
50                 }
51                 if (check(tmp)==false){
52                     return false;
53                 }
54             }
55         }
56         //经过以上三项检查,肯定返回true了
57         return true;
58     }

运行结果:

 

posted @ 2020-07-19 19:23  细雨轻风  阅读(119)  评论(0编辑  收藏  举报