码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode刷题记录-36

时间:2020-07-19 23:31:41      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:sudo   load   hashset   bool   取值   cte   boa   哈希表   rac   

技术图片

 

 技术图片

 

 技术图片

 

 这题的思路也比较清晰,三个判断规则内部的逻辑都是相同的,可以提取出来做成一个单独的方法: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     }

运行结果:

技术图片

 

LeetCode刷题记录-36

标签:sudo   load   hashset   bool   取值   cte   boa   哈希表   rac   

原文地址:https://www.cnblogs.com/gilgamesh-hjb/p/13340870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!