力扣经典150题解析之三十四:有效的数独

devtools/2024/10/19 5:29:55/

目录

      • 解题思路与实现 - 有效的数独
        • 问题描述
        • 示例
        • 解题思路
        • 算法实现
        • 复杂度分析
        • 测试与验证
        • 总结
      • 感谢阅读!

解题思路与实现 - 有效的数独

问题描述

判断一个 9 x 9 的数独是否有效,根据以下规则验证已经填入的数字是否有效:

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 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

解题思路
  1. 遍历数独,分别使用三个二维数组 rowscolsboxes 来记录每行、每列以及每个 3x3 宫内出现的数字情况。
  2. 对于每个数字,判断它在当前行、当前列和当前 3x3 宫内是否已经出现过,若出现过则说明数独无效。
  3. 遍历结束后,若没有发现任何冲突,则数独有效。
算法实现
public boolean isValidSudoku(char[][] board) {boolean[][] rows = new boolean[9][9];boolean[][] cols = 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] != '.') {int num = board[i][j] - '1';int boxIndex = (i / 3) * 3 + (j / 3);if (rows[i][num] || cols[j][num] || boxes[boxIndex][num]) {return false; // 重复出现}rows[i][num] = true;cols[j][num] = true;boxes[boxIndex][num] = true;}}}return true;
}
复杂度分析
  • 时间复杂度:O(1),因为固定为 9 x 9 的数独,算法的时间复杂度是常数级别的。
  • 空间复杂度:O(1),同样因为固定为 9 x 9 的数独,额外空间的大小也是常数级别的。
测试与验证

设计不同的数独输入,包括有效的和无效的情况,验证算法的正确性和效率。

总结

通过本文的详细解题思路和算法实现,可以有效地判断给定的数独是否有效。利用三个二维数组记录每行、每列和每个 3x3 宫内的数字出现情况,然后进行遍历验证,实现了对数独的有效性检查。

感谢阅读!


http://www.ppmy.cn/devtools/11498.html

相关文章

SQL表连接详解:JOIN与逗号(,)的使用及其性能影响

省流版 在这个详细的解释中&#xff0c;我们将深入探讨SQL中表连接的概念&#xff0c;特别是JOIN和逗号&#xff08;,&#xff09;在连接表时的不同用法及其对查询性能的影响。通过实际示例和背后的逻辑分析&#xff0c;我们将揭示在不同场景下选择哪种连接方式更为合适。 1.…

深度学习-01

机器学习是一种人工智能的分支&#xff0c;主要研究如何让计算机系统通过从大量的数据中学习并自动改进其性能。机器学习算法通过统计和数学模型来分析和理解数据&#xff0c;从而能够自动发现数据中的模式和规律&#xff0c;并根据这些规律进行预测和决策。 机器学习可以应用于…

Giants Planet 宣布推出符文,建立在坚实价值的基础上

这是一项旨在释放我们不断发展的生态系统全部潜力的新功能。符文提供了一种更简单的方法来创建通证&#xff0c;这些通证可以从比特币区块链的安全性和去中心化中获益。 符文&#xff1a;建立在坚实的基础上 可以将比特币视为存储贵重物品的安全保险库。 符文就像保险库中的特…

node+vue3的websocket前后端消息推送

nodevue3的websocket前后端消息推送 前期写web项目时&#xff0c;前端获取数据的方式一般是向后端发起数据请求&#xff0c;然后后端向前端发送数据&#xff0c;然后对数据进行渲染&#xff0c;这是最常规的一种数据通讯方式&#xff0c;适用于绝大部分前后端分离的项目 实际…

tcpdump服务器抓包实测

背景 最近服务器上访问一个接口时候&#xff0c;经常容易conn time out.接口提供者就是不承认是他的问题。IT也说网络没有问题。 TMD有鬼了是吧 然后我就自己百度如何抓包&#xff0c;感谢星火大模型 要在服务器上使用tcpdump抓取当前服务器访问xxxxx:port的包&#xff0c;并分…

亚马逊多账号多店铺防关联技巧分享

随着亚马逊识别技术的提升&#xff0c;以及政策的加强&#xff0c;不少跨境电商的卖家都面临着多账号多店铺被关联的风险&#xff0c;这个时候&#xff0c;卖家就需要做好相关的防关联措施了&#xff0c;下面这些方法很有效&#xff0c;可以去参考&#xff01; 亚马逊多账号多…

Linux虚拟化————KVM

1、安装kvm虚拟化套件 [rootbogon ~]# yum -y install virt* 2、启动服务 [rootbogon ~]# systemctl start libvirtd [rootbogon ~]# systemctl status libvirtd ● libvirtd.service - Virtualization daemonLoaded: loaded (/usr/lib/systemd/system/libvirtd.service; di…

数字化校园引领未来

在当今科技日新月异的时代&#xff0c;数字化转型已成为各行各业的必然趋势&#xff0c;教育领域也不例外。随着信息技术的迅猛发展&#xff0c;数字化已经成为推动教育变革的重要力量&#xff0c;它不仅重塑了传统的教育模式&#xff0c;还为学生、教师以及整个教育生态系统带…