Leetcode 36: 有效的数独

【中等】力扣算法题解析LeetCode36:有效的数独 本文提出了一种高效验证数独有效性的算法,通过位掩码技术优化空间使用。使用三个整数数组分别记录行、列、3x3宫格内数字出现情况,将每个数字转换为位掩码进行检测。遍历9x9网格时,检查当前数字在位掩码中是否冲突,若无冲突则更新掩码。宫格索引通过(i/3)*3 + j/3计算。该方法仅需27个整数的存储空间,利用位运算实现高效检测,时空复杂度均为O(1)。Java实现代码简洁,通过字符转换、位运算和索引计算快速验证数独有效性。 阅读详情

题目描述:
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
注意:
一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
空白格用 ‘.’ 表示。
示例:
1.
在这里插入图片描述
输入:board =
[[“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. 输入:board =
[[“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 存在, 因此这个数独是无效的。
思路:
按照数独的要求,利用哈希表(set)检查所给是否是满足要求的即可。

class Solution(object):
    def isValidSudoku(self, board):
        """
        :type board: List[List[str]]
        :rtype: bool
        """
        # 首先判断行是否满足
        for i in range(9):
            set_h = set()
            for j in range(9):
                if board[i][j] != '.':
                    if board[i][j] not in set_h:
                        set_h.add(board[i][j])
                    elif board[i][j] in set_h:
                        return False
        # 判断列是都满足
        for p in range(9):  # 列数
            set_l = set()
            for q in range(9):  # 行数
                if board[q][p] != '.':
                    if board[q][p] not in set_l:
                        set_l.add(board[q][p])
                    elif board[q][p] in set_l:
                        return False
        # 判断每个3*3格子是否满足
        for g_h in range(3):
            for g_l in range(3):
                set_g = set()
                for i_g in range(3):
                    for i_l in range(3):
                        if board[i_g+g_h*3][i_l+g_l*3] != '.':
                            if board[i_g+g_h*3][i_l+g_l*3] not in set_g:
                                set_g.add(board[i_g+g_h*3][i_l+g_l*3])
                            else:
                                return False
        return True

时间复杂度:O(1)。数独共有 81 个单元格,只需要对每个单元格遍历一次即可。
空间复杂度:O(1)。由于数独的大小固定,因此哈希表的空间也是固定的。

LeetCode 第36题:有效的数独 题目要求我们编写一个算法来判断一个 9x9 的数独是否有效。数字1-9在每一行只能出现一次。数字1-9在每一列只能出现一次。数字1-9在每一个以粗实线分隔的3x3宫内只能出现一次。一个有效的数独(部分已被填充)不一定是可解的。只需要根据已经填入的数字要求验证即可。空的单元格用'.'表示。例如:原因:第一列有两个8。通过这个数独小侦探的过程,我们学会了如何检查一个数独是否有效。利用哈希表的方法,我们能够在O(1)的时间复杂度内完成每一个格子的检查,整体时间复杂度为O(n^2),其中n。 阅读详情

相关推荐

leetcode:36. 有效的数独

题目 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-sudoku 请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。 注意: 一个有效的数独(部分已被填充)不一定是可解的。 只需要根据

uncle_ll的博客 235

leetcode37. 解数独

leetcode37. 解数独

qq_35374224的博客 269

leetcode: 36.有效的数独

验证已经填入的数字是否有效即可。来源:力扣(LeetCode)

uncle_ll的博客 318

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

Leetcode每日一题——7. 解数独。递归四部曲。回溯

weixin_52709752的博客 954

告别IMEI!手把手教你用UUID实现Android设备唯一标识(兼容Android 10-13)

本文详细探讨了在Android 10及以上版本中,如何构建合规且高可用的设备唯一标识方案以替代被限制访问的IMEI。文章深入分析了Android设备标识符的演变,并提供了基于UUID/GUID的完整实现策略,包括生成算法、多级持久化存储方案(如MediaStore)、权限处理以及版本兼容性实践,帮助开发者应对Android 10-13的隐私政策变化。

weixin_28339967的博客 575

Silvaco TCAD仿真4——DeckBuild实战:从示例库到自定义设计

本文详细介绍了Silvaco TCAD仿真工具DeckBuild的实战应用,从示例库的使用到自定义设计的全过程。通过具体案例和参数修改技巧,帮助用户快速掌握TCAD仿真技术,提升半导体器件设计的效率和精度。特别适合需要从基础入门到进阶操作的工程师和研究人员。

weixin_29284657的博客 435

Leetcode刷题详解——解数独

定义行、列、九宫格标记数组已经找到可行方法的标记变量,将它们初始化为false定义一个数组来存储每个需要处理的位置将题目给出的所有元素的行、列以及九宫格坐标标记为true将所有需要处理的位置存入数组。

勇气是明知不可为而为之 386

【5G NB-IoT NTN】3GPP R17 NB-IoT NTN介绍_nbiot ntn

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!” />你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!更多资料点击此处获qu!!

2401_83703866的博客 3167

【算法与数据结构】37、LeetCode解数独

所有的LeetCode题解索引,可以看这篇文章——。

晚安的博客 762

有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)

有限时间滑模控制(FTSMC)和固定时间滑模控制(FixTSMC)是两种重要的控制策略,旨在实现系统状态的快速收敛。FTSMC通过设计滑模面和控制律,确保系统状态在有限时间内收敛到原点,但其收敛时间与初始状态相关。FixTSMC则进一步优化,使收敛时间与初始状态无关,适用于高动态环境,具有更强的鲁棒性和更平滑的控制信号。两种方法均通过李雅普诺夫函数证明其稳定性,并通过仿真验证其有效性。FixTSMC在工程应用中更为可靠,尤其适合安全关键系统。

Lyajpunov的博客 3224

原创_新魔百和CM201-1鸿蒙架构当贝乐家语音安卓9线刷固件包刷机教程可救砖rom刷机包

不用担心变砖,因为系统内核会自动判断分区及CPU等级,假设你CPU是高于S905L3的那么。7.adb功能支持,系统增加开机自启功能,添加老人桌面模式,默认为年轻化桌面;所以我发的这个固件可适用于_cw_ys_zg_zn代工上生产的盒子进行刷机;5.CPU及GPU算法更改,当观看4K片源时,AI智能会自动优化系统后台进程,正如我所说,本固件是采用安卓公版镜像制作而成,那么代工厂也是使用的公版镜像,1.移植鸿蒙架构代码,完美融合安卓系统,增加系统的稳定性;刷机的时候 他会自动短接链接,所以不存在变砖。

a138088150的博客 1万+

37. 解数独 - 力扣(LeetCode)

这个解题思路是一个典型的回溯算法在数独求解问题上的应用,它非常直观且易于理解。Python: 方法、for循环、if else语句、列表。Java: 方法、for循环、if else语句、数组。编写一个程序,通过填充空格来解决数独问题。数独部分空格内已填入了数字,空白格用。

it爱好者的学习之路 1382

贝叶斯时空模型-INLA-4

该文章中,会简化数学计算的过程,主要是针对,在有数据的基础上,如何应用贝叶斯时空模型,找出影响因素,绘制时间变化的空间分布预测图。上述中关键一步与前几期介绍的不一样的地方是,我们加入了n.group参数,用来指定年份,先看一下Year有多少年的,然后封装在s.index里面。在前述的内容中,我们介绍了,如何处理空间的数据,利用海拔高度预测降雨量的例子。建立好数据及mesh以后,我们现在写INLA公式,如果不考虑残差项,那就是固定效应,现在我们增加残差项,及空间与时间效应。这里的Mesh设定值为10,20。

学习中 2949

leetcode力扣:36. 有效的数独

基本思路: 判断数独有效要满足三个条件: 1.每行数字1-9没有重复的 2.每列数字1-9没有重复的 3.每个九宫格数字1-9没有重复的 我的思路就是,用ascall码自建哈希表,记录出现的次数,如果每行,每列或者每个九宫格同一个数字出现的次数大于一次就输出false 代码实现: class Solution { public boolean isValidSudoku(char[][] board) { //记录每行1到9每个数字出现的个数 int ...

IAMZTDSF的博客 622

《YOLO11改进有效涨点》 专栏目录 | 目前已有100+篇内容,内含各种Head检测头、损失函数Loss、Backbone、Neck等创新点改进【持续更新】

YOLO11改进专栏目录,YOLO11改进目录

kay_545 1万+

[系统安全] 四十七.恶意软件分析 (3)动态分析经典沙箱Cape的安装和基础用法详解

系统安全将更好地帮助初学者了解病毒逆向分析和系统安全。前文详细介绍恶意代码静态分析经典工具Capa的基础用法,以及批量提取静态特征和ATT&CK技战术,主要是从提取的静态特征Json文件中提取关键特征。这篇文章将详细讲解动态分析沙箱Cape,其是一个开源的自动恶意软件分析系统,通过自动运行和分析恶意软件,全面分析和提取恶意软件的关键特征。本文先介绍Cape沙箱的安装和基础用法,后续随着深入再分享。基础性文章,希望对您有帮助!

杨秀璋的专栏 6738

Leetcode 36:有效的数独

Leetcode 36:有效的数独题目描述我的解法:利用set特性,将判断分为三个步骤别人家的解法 题目描述 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 上图是一个部分填充的有效的数独。 数独部分空格内已填入了数...

IcdKnight的博客 269

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LeetCode之旅:36. 有效的数独

题意: 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 1、数字 1-9 在每一行只能出现一次。 2、数字 1-9 在每一列只能出现一次。 3、数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 上图是一个部分填充的有效的数独。 数独部分空格内已填入了数字,空白格用 ‘.’ 表示。 示例 1: 输入: [ [“5”,“3”,".",".",“...

路漫漫其修远兮,吾将上下而求索。 373

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode36:有效的数独

LeetCode36:有效的数独题目说明分析C++代码 题目说明 Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be partially filled, where empty cells are filled with the character ‘...

坚果 211

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

leetcode 36: 是否有效数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。只需要根据以上规则,验证已经填入的数字是否有效即可。一个有效的数独(部分已被填充)不一定是可解的。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。空白格用 ‘.’ 表示。

m0_55284524的博客 49

刷题笔记:力扣第36题-有效的数独

本文比较了两种数独有效性验证的算法实现。第一种采用暴力解法,通过三次独立循环分别检查行、列和3×3宫格,使用标记数组判断重复元素。第二种是官方优化方案,通过定义三个二维数组(行、列、宫格)在一次双重循环中完成所有检查,利用空间换时间策略简化代码。两种方法核心思路相同,但官方方案更简洁高效,通过计算宫格索引公式(i/3)*3+(j/3)实现同步验证。最终都返回布尔值表示数独是否有效。

hanlin03的博客 182

leetcode36:有效的数独

每行中数字1-9不能重复。每列中数字1-9不能重复。每个 3×33 \times 33×3 的小方格内数字1-9不能重复。一个 9×99 \times 99×9 的二维数组board,其中每个元素为字符'1'到'9'或'.'(代表空格)。布尔值,true表示数独有效,false表示无效。棋盘大小固定为 9×99 \times 99×9。数组中仅包含'1'到'9'或'.'。棋盘可能只部分填充。检查行:对于每一行,用一个集合来记录该行中已出现的数字。如果数字重复出现,则判定数独无效。

D2510466299的博客 960

力扣—36:有效的数独 题解

先给题目: 请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图) 数独部分空格内已填入了数字,空白格用 '.' 表示。 注意: 一个有效的数独(部分已被填充)不一定是可解的。 只需要根据以上规则,验证已经填入的数字是否有效即可。 示例 1: 输入:bo...

zjsru_Beginner的博客 477

leetcode:36. 有效的数独

直观上,我们很容易想到使用哈希表来记录某行/某列/某个小方块出现过哪些数字,来帮助我们判断是否符合「有效数独」的定义。其实,另外,我们可以将box定义成三维数组,更好理解。

OceanStar的博客 1073
上一篇: Leetcode 52: N皇后II
下一篇: Leetcode 37:解数独
coding_diamond
博客等级 码龄8年 8粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值