Python——LeetCode刷题——【36. 有效的数独】(字节二面)

该博客详细介绍了如何用Python编写一个有效的数独解决方案验证算法。首先,通过逐行检查确保每行没有重复数字,然后进行逐列检查。最后,通过检查9x9网格内的3x3子网格来验证数独的正确性。整个过程利用了存储列表来辅助判断,一旦发现重复即返回False,否则返回True,表明数独有效。
摘要由CSDN通过智能技术生成

题目描述:

在这里插入图片描述

解题思路:

模拟即可。
第一种情况逐行检查
首先,我们逐行遍历这个9X9的二维列表,每行建立一个storage的列表,用于存储每行出现的数字字符。如果字符为".",直接continue。如果为其他字符,则放入storage中。如果遍历到的字符已经出现在了storage中,那么直接return False。(因为证明了数字字符重复出现了!!!)
第二种情况逐列检查
逐列遍历,思路同逐行遍历!
第三种情况检查九宫格
第一层循环控制,每个九宫格对应的board行索引。第二次循环控制,每个九宫格对应的board列索引。
第三层循环控制具体到每个九宫格里面的行遍历,第四层循环控制具体到每个九宫格里面的列遍历。
第三四层循环控制一个3X3格子的检查,思路同逐行遍历和逐列遍历。借助storage列表。

代码以及注释:

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        # 逐行检查
        for i in range(9):
            # 存储每行出现的数字字符
            storage = []
            for j in range(9):
                if board[i][j] == '.':
                    continue
                if board[i][j] in storage:
                    return False
                else:
                    storage.append(board[i][j])
        
        # 逐列检查
        for i in range(9):
            # 存储每列出现的数字字符
            storage = []
            for j in range(9):
                if board[j][i] == '.':
                    continue
                if board[j][i] in storage:
                    return False
                else:
                    storage.append(board[j][i])
        
        # 检查九宫格
        # 每个九宫格的开始索引
        for i in range(0, 9, 3):
            for j in range(0, 9, 3):
                storage = []
                # 遍历3X3格子中字符
                for x in range(0, 3):
                    for y in range(0, 3):
                        if board[i+x][j+y] == ".":
                            continue
                        if board[i+x][j+y] in storage:
                            return False
                        else:
                            storage.append(board[i+x][j+y])
        # 全部检查通过
        return True

结果:

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值