leetcode 36. 有效的数独 (将 9 * 9 数独划分成 9 宫格 )
leetcode 36. 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
上图是一个部分填充的有效的数独。
数独部分空格内已填入了数字,空白格用 ‘.’ 表示。
示例 1:
输入:
[
[“5”,“3”,".",".",“7”,".",".",".","."],
[“6”,".",".",“1”,“9”,“5”,".",".","."],
[".",“9”,“8”,".",".",".",".",“6”,"."],
[“8”,".",".",".",“6”,".",".",".",“3”],
[“4”,".",".",“8”,".",“3”,".",".",“1”],
[“7”,".",".",".",“2”,".",".",".",“6”],
[".",“6”,".",".",".",".",“2”,“8”,"."],
[".",".",".",“4”,“1”,“9”,".",".",“5”],
[".",".",".",".",“8”,".",".",“7”,“9”]
]
输出: true
示例 2:
输入:
[
[“8”,“3”,".",".",“7”,".",".",".","."],
[“6”,".",".",“1”,“9”,“5”,".",".","."],
[".",“9”,“8”,".",".",".",".",“6”,"."],
[“8”,".",".",".",“6”,".",".",".",“3”],
[“4”,".",".",“8”,".",“3”,".",".",“1”],
[“7”,".",".",".",“2”,".",".",".",“6”],
[".",“6”,".",".",".",".",“2”,“8”,"."],
[".",".",".",“4”,“1”,“9”,".",".",“5”],
[".",".",".",".",“8”,".",".",“7”,“9”]
]
输出: false
解释: 除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。
但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。
说明:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
给定数独序列只包含数字 1-9 和字符 ‘.’ 。
给定数独永远是 9x9 形式的。
/*
思路:首先对于 3 * 3 的宫格,将其从左至右、从上到下分别编号为 0 - 8,即:
0 1 2
3 4 5
6 7 8
而判断 9 * 9 数独中的任意一个数属于第几个宫格,就取决于 (i / 3)* 3 + j / 3.
(i、j分别指该数在 9 * 9 数独中的行数和列数,且是从0开始)
首先可以先抽样3 * 9,对于列数 0 1 2 3 4 5 6 7 8 ,可以发现前三个不满3,中间三个满3
不满6,后三个满6不满9,所以对列数 / 3 可以得到是 0 / 1 / 2宫格。
抛开(列数 / 3),0 1 2 其实可以看成 0 0 03 4 5 3 3 36 7 8 6 6 6
通过观察我们可以发现,其实是 (i / 3)* 3.
综上,9 * 9 数独中的任意一个数属于第(i / 3)* 3 + j / 3 个宫格。那么就刚好 9 行 9 列 9 宫格,对于这三种划分方式,分别设置长度为10的数组,表示 0 - 9 ,
假如第一次出现则将boolean数组元素更新为true,假如重复了就return false。
*/class Solution {public boolean isValidSudoku(char[][] board) {boolean[][] r = new boolean[9][10]; //行的模拟哈希boolean[][] c = new boolean[9][10]; //列boolean[][] part = new boolean[9][10]; //每一个小方格for (int i = 0; i < 9; ++ i) {for (int j = 0; j < 9; ++ j) {if (board[i][j] != '.') {int val = board[i][j] - '0';if (r[i][val]) return false;if (c[j][val]) return false;if (part[(i / 3) * 3 + j / 3][val]) return false;r[i][val] = true;c[j][val] = true;part[(i / 3) * 3 + j / 3][val] = true;}}}return true;}
}
leetcode 36. 有效的数独 (将 9 * 9 数独划分成 9 宫格 )相关推荐
- leetcode 36. Valid Sudoku | 37. Sudoku Solver(数独)
36. Valid Sudoku https://leetcode.com/problems/valid-sudoku/ 题解 class Solution {public boolean isVal ...
- Java实现 LeetCode 36 有效的数独
36. 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在 ...
- [LeetCode] 36. 有效的数独(java实现)模拟题
[LeetCode] 36. 有效的数独(java实现)模拟题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. ...
- LeetCode 36. 有效的数独(哈希)
文章目录 1. 题目信息 2. 解题 2.1 暴力3次遍历查找 2.2 一次遍历查找 1. 题目信息 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1- ...
- LeetCode 36有效的数独37解数独(八皇后问题)
公众号:bigsai 回复进群加入打卡 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列 ...
- LeetCode 36. Valid Sudoku
LeetCode 36. Valid Sudoku Solution1:我的答案,比较笨.但是清晰易懂好上手啊~~~ class Solution { public:bool isValidSudok ...
- python大作业数独_python做一个数独小游戏
最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...
- (附代码)数独大作业【读取数独,解数独,生成唯一解数独(随机,特定形状,不同难度生成),玩数独】
注:未经同意不要转载. 上学期简单的做了一个数独程序,实现了一些功能,想简单的为大家提供的思路. 为了避免某些情况出现,具体代码暂时先不发了,有不太懂的地方可以评论提问啊. 下面是我的具体报告: 一, ...
- 数独问题流程图_数独游戏的难度等级分析及求解算法研究
2 数独难度等级 数独游戏发展至今, 在数独爱好者的积极探索下, 求解数独的算法众多, 有 矩形顶点删减法.关键数删减法等 [7] .解答一道数独问题是一种或多种方法相互 结合, 为了使玩家能循环渐进 ...
最新文章
- 手把手教你:如何让Windows恋上Linux bash
- equals方法重写详解
- PHP 实现简单的 倒计时 时分秒
- window统计文本字节_【NLP】机器如何认识文本 ?NLP中的Tokenization方法总结
- 学会这个大屏神器,低代码开发高端可视化大屏不在话下
- C语言学习笔记(5)
- 7.1 pdo 宝塔面板php_腾讯云服务器建站系列 – 熟练宝塔面板部署网站/快速安装HTTPS加密...
- springboot利用拦截器和过滤器获取post请求参数
- 电脑桌面云便签怎么开启窗口置顶一直让悬浮便签显示在屏幕上?
- python 时间戳转各时区时间
- MODBUS RTU协议
- 数据脱敏 Data Masking
- 成熟男人与24岁女孩精彩对白 —非常感动
- 三个牛人教你怎么高效阅读论文
- Kotlin/DSL(Anko),原汁原味Kotlin开发Android---Activity Fragment与AnkoUI分离,强大的复用,更加便捷的开发
- 使用shiro进行权限管理
- java无法解析zip
- 云+社区【玩转腾讯云】征文活动,COSCI更有额外奖励
- 单反相机快门速度怎么设置
- 计算机组成原理um实验总结,计算机组成原理第三次实验报告.doc