1. 原题链接

https://leetcode.com/problems/valid-sudoku/description/

2. 题目要求

给定一个 9✖️9 的数独,判断该数独是否合法

数独用字符类型的二维数组表示,为空的地方用 '.' 代替

合法应满足以下要求:(1)每一列的数字不重复;(2)每一行的数字不重复;(3)3✖️3区域内不存在重复值;下图是一个合法的数独:

3. 解题思路

根据合法应满足的三个要求依此来进行判断:

(1)行和列是否存在重复值:可以通过两层for循环遍历二维数组,然后使用HashSet,因为HashSet不允许存在重复值。依此将遍历到的数字加入HashSet,无法加入时则证明存在重复,返回false;

(2)3✖️3区域内是否存在重复值:

难点:如何经过一次内部for循环就能遍历到一个 3✖️3 区域

假设我们现在要得到红框圈住的3✖️3区域,第一层for循环 i 此时为“1”,第二层for循环 j 从“0”遍历到“8”。如何确保rowIndex和columnIndex的取值范围都是 1~3?

可以发现 “j/3” 和 “j%3”的范围是 0~2,此时的 i =1,因此我们要对这三者进行利用,就能保证rowIndex和columnIndex的取值范围都是 1~3。

4. 代码实现

 import java.util.HashSet;

 public class ValidSudoku36 {
public static void main(String[] args) {
char[][] board = {{'', '', '.', '.', '', '.', '.', '.', '.'},
{'', '.', '.', '', '', '', '.', '.', '.'},
{'.', '', '', '.', '.', '.', '.', '', '.'},
{'', '.', '.', '.', '', '.', '.', '.', ''},
{'', '.', '.', '', '.', '', '.', '.', ''},
{'', '.', '.', '.', '', '.', '.', '.', ''},
{'.', '', '.', '.', '.', '.', '', '', '.'},
{'.', '.', '.', '', '', '', '.', '.', ''},
{'.', '.', '.', '.', '', '.', '.', '', ''}};
System.out.println(isValidSudoku(board));
} public static boolean isValidSudoku(char[][] board) {
for (int i = ; i < board.length; i++) {
HashSet<Character> row = new HashSet<Character>();
HashSet<Character> column = new HashSet<Character>();
HashSet<Character> cube = new HashSet<Character>();
for (int j = ; j < board.length; j++) {
if (board[i][j] != '.' && !row.add(board[i][j]))
return false; if (board[j][i] != '.' && !column.add(board[j][i]))
return false; int rowIndex = * (i / ); int columnIndex = * (i % );
System.out.print(rowIndex + j / +",");
System.out.print(columnIndex + j % +" ");
if (board[rowIndex + j / ][columnIndex + j % ] != '.' && !cube.add(board[rowIndex + j / ][columnIndex + j % ]))
return false;
}
System.out.println("");
System.out.println("");
}
return true;
}
}

LeetCode:36. Valid Sudoku(Medium)的更多相关文章

  1. LeetCode:39. Combination Sum(Medium)

    1. 原题链接 https://leetcode.com/problems/combination-sum/description/ 2. 题目要求 给定一个整型数组candidates[ ]和目标值 ...

  2. LeetCode:43. Multiply Strings (Medium)

    1. 原题链接 https://leetcode.com/problems/multiply-strings/description/ 2. 题目要求 给定两个String类型的正整数num1.num ...

  3. 【leetcode】36. Valid Sudoku(判断能否是合法的数独puzzle)

    Share Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be validated accordi ...

  4. LeetCode:16. 3Sum Closest(Medium)

    1. 原题链接 https://leetcode.com/problems/3sum-closest/description/ 2. 题目要求 数组S = nums[n]包含n个整数,找出S中三个整数 ...

  5. LeetCode:49. Group Anagrams(Medium)

    1. 原题链接 https://leetcode.com/problems/group-anagrams/description/ 2. 题目要求 给定一个字符串数组,将数组中包含相同字母的元素放在同 ...

  6. LeetCode:22. Generate Parentheses(Medium)

    1. 原题链接 https://leetcode.com/problems/generate-parentheses/description/ 2. 题目要求 给出一个正整数n,请求出由n对合法的圆括 ...

  7. LeetCode:20. Valid Parentheses(Easy)

    1. 原题链接 https://leetcode.com/problems/valid-parentheses/description/ 2. 题目要求 给定一个字符串s,s只包含'(', ')',  ...

  8. LeetCode:9. Palindromic Number(Medium)

    原题链接:https://leetcode.com/problems/palindrome-number/description/ 1. 题目要求:判断一个int类型整数是否是回文,空间复杂度O(1) ...

  9. 【LeetCode】36. Valid Sudoku 解题报告(Python)

    [LeetCode]36. Valid Sudoku 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址 ...

随机推荐

  1. Executor线程池框架

    Executor线程池框架 new Thread()的缺点 每次new Thread()耗费性能 调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致 ...

  2. PHP-------- JQUERY方式

     JQUERY方式 1.根据ID取元素,Jquery对象  var div = $("#one"); 2.根据class取  var div = $(".test&quo ...

  3. PHP Socket 简单使用

    <?php /*socket收发数据 @host(string) socket服务器IP @post(int) 端口 @str(string) 要发送的数据 @back 1|0 socket端是 ...

  4. 调节Ubuntu分辨率

    列出当前支持的分辨率 使用 xrandr 命令新增显示模式 至此分辨率更改完成 重启后会失效 在 ~/.profile 最末尾添加修改分辨率的命令

  5. LayIM.NetClient 组件开发记录

    前言 好久没写博客了.前阶段看了下Hangfire组件,后来对其代码比较感兴趣,当时不太了解他如何生成的页面和一些访问请求等.后来看了下源代码,发现原来是 OWIN 在搞怪.于是乎开始深入研究Hang ...

  6. Windows 使用iCloud日历

    作者:Lumos Night链接:https://www.zhihu.com/question/34287617/answer/97299386来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...

  7. Android平台上PMEM的使用及Platform设备注册(二)

    三.注册PMEM设备 这里我们除了描述PMEM设备,还将注册一个拥有memory空间和IRQ资源的示例设备example_device. 对于example_device,定义如下结构体: stati ...

  8. Excel批量导入商品,遇到导入失败记录到另一个Excel中供下载查看

    /// <summary> /// EXCEL批量导入 /// </summary> /// <param name="filePath">文件 ...

  9. React-Navigation web前端架构

    React-Navigation 前端架构 准备 /*安装组件*/ npm install --save react-navigation npm install --save react-nativ ...

  10. webstorm如何支持markdown

    首先安装markdown 插件 第一个即可.