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 宫格 )相关推荐

  1. leetcode 36. Valid Sudoku | 37. Sudoku Solver(数独)

    36. Valid Sudoku https://leetcode.com/problems/valid-sudoku/ 题解 class Solution {public boolean isVal ...

  2. Java实现 LeetCode 36 有效的数独

    36. 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在 ...

  3. [LeetCode] 36. 有效的数独(java实现)模拟题

    [LeetCode] 36. 有效的数独(java实现)模拟题 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总结 1. ...

  4. LeetCode 36. 有效的数独(哈希)

    文章目录 1. 题目信息 2. 解题 2.1 暴力3次遍历查找 2.2 一次遍历查找 1. 题目信息 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1- ...

  5. LeetCode 36有效的数独37解数独(八皇后问题)

    公众号:bigsai 回复进群加入打卡 有效的数独 判断一个 9x9 的数独是否有效.只需要根据以下规则,验证已经填入的数字是否有效即可. 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列 ...

  6. LeetCode 36. Valid Sudoku

    LeetCode 36. Valid Sudoku Solution1:我的答案,比较笨.但是清晰易懂好上手啊~~~ class Solution { public:bool isValidSudok ...

  7. python大作业数独_python做一个数独小游戏

    最近看了下python的一些知识,在这里记载一下. 1.首先是安装,在官网下载最新的版本3.6,安装的时候要注意在下面勾选上ADD TO PATH,安装的时候会自动写入到环境变量里面,如果没有勾选,可 ...

  8. (附代码)数独大作业【读取数独,解数独,生成唯一解数独(随机,特定形状,不同难度生成),玩数独】

    注:未经同意不要转载. 上学期简单的做了一个数独程序,实现了一些功能,想简单的为大家提供的思路. 为了避免某些情况出现,具体代码暂时先不发了,有不太懂的地方可以评论提问啊. 下面是我的具体报告: 一, ...

  9. 数独问题流程图_数独游戏的难度等级分析及求解算法研究

    2 数独难度等级 数独游戏发展至今, 在数独爱好者的积极探索下, 求解数独的算法众多, 有 矩形顶点删减法.关键数删减法等 [7] .解答一道数独问题是一种或多种方法相互 结合, 为了使玩家能循环渐进 ...

最新文章

  1. 手把手教你:如何让Windows恋上Linux bash
  2. equals方法重写详解
  3. PHP 实现简单的 倒计时 时分秒
  4. window统计文本字节_【NLP】机器如何认识文本 ?NLP中的Tokenization方法总结
  5. 学会这个大屏神器,低代码开发高端可视化大屏不在话下
  6. C语言学习笔记(5)
  7. 7.1 pdo 宝塔面板php_腾讯云服务器建站系列 – 熟练宝塔面板部署网站/快速安装HTTPS加密...
  8. springboot利用拦截器和过滤器获取post请求参数
  9. 电脑桌面云便签怎么开启窗口置顶一直让悬浮便签显示在屏幕上?
  10. python 时间戳转各时区时间
  11. MODBUS RTU协议
  12. 数据脱敏 Data Masking
  13. 成熟男人与24岁女孩精彩对白 —非常感动
  14. 三个牛人教你怎么高效阅读论文
  15. Kotlin/DSL(Anko),原汁原味Kotlin开发Android---Activity Fragment与AnkoUI分离,强大的复用,更加便捷的开发
  16. 使用shiro进行权限管理
  17. java无法解析zip
  18. 云+社区【玩转腾讯云】征文活动,COSCI更有额外奖励
  19. 单反相机快门速度怎么设置
  20. 计算机组成原理um实验总结,计算机组成原理第三次实验报告.doc

热门文章

  1. 20110814炒股日记--关于内外盘【600192长城电工】
  2. Java学习——Day13:IO流
  3. maya阿诺德渲染失败_Arnold 批渲染失败
  4. 德勤加拿大:在Flow链上创建NFT所消耗的能量比人们搜索或发布一个帖子还少
  5. 建博会网红打卡地的幕后推手,竟来自这个团队
  6. Matlab--函数与子函数
  7. 如何测试服务器及端口是否畅通?
  8. The word 'jsp' is not correctly spelled. Eclipse 拼写检查出错处理办法
  9. 树莓派配置文件 config.txt - HDMI 热插拔
  10. Apollo阿波罗配置中心基本概述