菜鸡每日一题系列打卡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)。

执行结果

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

每日一题——有效的数独相关推荐

  1. 【20221119】【每日一题】解数独

    编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内 ...

  2. Leetcode每日一题——7. 解数独

    题目链接: 力扣 编写一个程序,通过填充空格来解决数独问题. 数独的解法需 遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分 ...

  3. android+studio数独小游戏,‎App Store 上的“益智数独-每日一题挑战题,锻炼你的大脑”...

    2021年,数以百万计的人在玩数独游戏了,他们通过数独游戏不断训练自己的大脑,2022年,通过数独游戏来训练自己大脑的人可能达破千万人次,你准备好了吗? 这是一款免费的数独游戏,里面包含多个难度级别, ...

  4. [每日一题]0:每日一题汇总

    每日一题 锻炼编程能力,每日尽量至少更新一道算法编程题,博客内主要更新学习C/C++.以及Linux的相关知识点,希望在记录学习过程的同时也能方便遇到相同问题的人,方便回顾复习,也希望能够与大家一起交 ...

  5. 算法笔记——每日一题(完结)

    算法笔记 From Now To My Death 前言 初级算法 1.两数之和 7.整数反转 9.回文数 14.最长公共前缀 27.移除元素[拷贝复制] 28.实现strStr()[双指针] 35. ...

  6. 对数函数定义域和值域_呆哥数学每日一题 —— 复合函数值域

    如果想要获取往期每日一题电子版,可以加我微信:daigemath366,备注:知乎 每日一题 呆哥解析:这是一个函数和复合函数的综合问题 首先我们先把原函数的值域求出来 先直接求导: 导数不容易判断单 ...

  7. 每日一题(进制转换)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  8. 每日一题(合并表格)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

  9. 每日一题(字符串拆分)

    前言:为了让小伙伴更方便的学习编程语言,小白每天都会分享一道编程题.小白也创建了一个微信公众号,会同步更新题目和相关的视觉领域的知识,如果小伙伴不方便在网页上阅读文章,可以关注微信公众号"小 ...

最新文章

  1. python reduce函数 day16
  2. android 集成同一interface不同泛型_Dig101:Go之读懂interface的底层设计
  3. 使用PHPExcel实现Excel文件的导入和导出(模板导出)
  4. ad用户和计算机显示2000个,AD 用户属性userAccountControl的详细解释
  5. 6月16日!蒋江伟深度解读基础云产品生态战略 | 凌云时刻
  6. can收发器TJA1043
  7. python3版本升级_python版本升级到3.7
  8. [leetcode] 884. Uncommon Words from Two Sentences
  9. 2020年初冠状病毒大事记随笔
  10. 讯飞语音 20006 错误 已解决
  11. Arduino ESP8266/ESP32读取和改写MAC
  12. 9flash:个人网站商业化之蜕
  13. jQuery 从零开始学习 (二) 选择器
  14. 计算机真题模拟运算表怎么做,教大家Excel工作表中使用模拟运算表的方法
  15. zbb20180930 设计模式-单例模式
  16. ProM安装以及配置
  17. N型电池将成为下一代主流方向
  18. 中国探月工程首席科学家欧阳自远:“嫦娥”月面图千真万确
  19. java好玩的项目github_GitHub 上有些什么好玩的项目?
  20. 根据html改为ftl模板生成pdf文件,支持中文及换行

热门文章

  1. 单片机仿真指示灯开关控制器
  2. 2021ccpc网络预选赛部分题解
  3. 禅道mysql怎么在本地配置_本地安装部署禅道
  4. 检测到 Mac 文件格式: 请将源文件转换为 DOS 格式或 UNIX 格式
  5. 爬取B站20万+条弹幕,我学会了如何成为B站老司机
  6. 体系结构 记分牌实例
  7. 主键主键外键和索引_主键和外键之间的区别
  8. 我喜欢的图片不是png格式怎么办,使用Windows电脑1分钟搞定格式转换
  9. 【二叉树】用python实现AVL树
  10. java jpress,JPress导入Eclipse