每日一题——有效的数独
菜鸡每日一题系列打卡36天
每天一道算法题目
小伙伴们一起留言打卡
坚持就是胜利,我们一起努力!
题目描述(引自LeetCode)
判断一个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形式的。
题目分析
这是一道判断9x9数独是否有效(而非是否可解)的题目,只需要按照题目给定的3个判断条件逐一判断即可。为了减少遍历次数,需要在针对board[][]的一次遍历中完成三个条件的判断,详见代码及注释。
代码实现
class Solution {public boolean isValidSudoku(char[][] board) {// 初始化行数组,列数组,宫数组boolean[][] rows = new boolean[9][9];boolean[][] columns = new boolean[9][9];boolean[][] boxes = new boolean[9][9];for (int i = 0; i < 9; i++) {for (int j = 0; j < 9; j++) {// 非空白格if (board[i][j] != '.') {// char转intint num = board[i][j] - '1';// 用于枚举子数独int k = (i / 3) * 3 + j / 3;// 判断是否符合要求if (rows[i][num] || columns[j][num] || boxes[k][num]) return false;// 更新行数组,列数组,宫数组rows[i][num] = true;columns[j][num] = true;boxes[k][num] = true;}}}// 返回结果return true;}}
代码分析
对代码进行分析,算法仅仅是对数独9宫格进行了一次遍历,固定为81次访问,因此,时间复杂度为O(1),而就空间而言,仅仅使用了常数级别的额外空间,因此,空间复杂度为O(1)。
执行结果
学习 | 工作 | 分享
????长按关注“有理想的菜鸡”
只有你想不到,没有你学不到
每日一题——有效的数独相关推荐
- 【20221119】【每日一题】解数独
编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内 ...
- Leetcode每日一题——7. 解数独
题目链接: 力扣 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分 ...
- android+studio数独小游戏,App Store 上的“益智数独-每日一题挑战题,锻炼你的大脑”...
2021年,数以百万计的人在玩数独游戏了,他们通过数独游戏不断训练自己的大脑,2022年,通过数独游戏来训练自己大脑的人可能达破千万人次,你准备好了吗? 这是一款免费的数独游戏,里面包含多个难度级别, ...
- [每日一题]0:每日一题汇总
每日一题 锻炼编程能力,每日尽量至少更新一道算法编程题,博客内主要更新学习C/C++.以及Linux的相关知识点,希望在记录学习过程的同时也能方便遇到相同问题的人,方便回顾复习,也希望能够与大家一起交 ...
- 算法笔记——每日一题(完结)
算法笔记 From Now To My Death 前言 初级算法 1.两数之和 7.整数反转 9.回文数 14.最长公共前缀 27.移除元素[拷贝复制] 28.实现strStr()[双指针] 35. ...
- 对数函数定义域和值域_呆哥数学每日一题 —— 复合函数值域
如果想要获取往期每日一题电子版,可以加我微信:daigemath366,备注:知乎 每日一题 呆哥解析:这是一个函数和复合函数的综合问题 首先我们先把原函数的值域求出来 先直接求导: 导数不容易判断单 ...
- 每日一题(进制转换)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- 每日一题(合并表格)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
- 每日一题(字符串拆分)
前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...
最新文章
- python reduce函数 day16
- android 集成同一interface不同泛型_Dig101:Go之读懂interface的底层设计
- 使用PHPExcel实现Excel文件的导入和导出(模板导出)
- ad用户和计算机显示2000个,AD 用户属性userAccountControl的详细解释
- 6月16日!蒋江伟深度解读基础云产品生态战略 | 凌云时刻
- can收发器TJA1043
- python3版本升级_python版本升级到3.7
- [leetcode] 884. Uncommon Words from Two Sentences
- 2020年初冠状病毒大事记随笔
- 讯飞语音 20006 错误 已解决
- Arduino ESP8266/ESP32读取和改写MAC
- 9flash:个人网站商业化之蜕
- jQuery 从零开始学习 (二) 选择器
- 计算机真题模拟运算表怎么做,教大家Excel工作表中使用模拟运算表的方法
- zbb20180930 设计模式-单例模式
- ProM安装以及配置
- N型电池将成为下一代主流方向
- 中国探月工程首席科学家欧阳自远:“嫦娥”月面图千真万确
- java好玩的项目github_GitHub 上有些什么好玩的项目?
- 根据html改为ftl模板生成pdf文件,支持中文及换行