LeetCode第36题:有效的数独

题目:
在这里插入图片描述
在这里插入图片描述
思路:
对于行和列的重复数字判断是比较好搞的,问题的关键在于这个3x3的小矩阵判断,涨知识的公式来了:temp = (i // 3) * 3 + j // 3,这个公式可以将9x9的大矩阵变成9个3x3的小矩阵,大概是这样的(图有点丑,主要是为了理解题意)
在这里插入图片描述
先创建字典,分别为row,col,cell(存储3x3单元格),然后将除了“.”的数字存到字典的key中,value为任意值,每次都比较key值是否出现相同的,若出现则返回false。

代码如下:

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        # row为行存储,col为列存储,cell为3*3单元格存储
        row = [{} for i in range(9)]
        col = [{} for i in range(9)]
        cell = [{} for i in range(9)]

        for i in range(9):
            for j in range(9):
                # 获取单元格
                num = board[i][j]
                temp = (i // 3) * 3 + j // 3
                # .不需要存储
                if num != ".":
                    # 将不同的数存到字典的key,value为任意值(此处设置为1)
                    if num not in row[i] and num not in col[j] and num not in cell[temp]:
                        row[i][num] = "1"
                        col[j][num] = "1"
                        cell[temp][num] = "1"
                    # 遇到相同的key就返回False
                    else:
                        return False
        return True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值