leetcode学习笔记(36.有效的数独)

90 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

本题考察数列相关知识,为中等题36.有效的数独

36. 有效的数独

题目

请你判断一个 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 存在, 因此这个数独是无效的。

代码

class Solution:
    def isValidSudoku(self, board):
        row = [[0] * 9 for _ in range(9)] #9行里每行1——9每个数字出现次数
        col = [[0] * 9 for _ in range(9)]
        box = [[0] * 9 for _ in range(9)] #每个方框里
        
        for i in range(9):
            for j in range(9):
                if board[i][j] == '.':
                    continue
                curNum = ord(board[i][j]) - ord('1')
                if row[i][curNum] != 0 or col[j][curNum] != 0 or box[j // 3 + (i // 3) * 3][curNum] != 0:
                    return False
                row[i][curNum], col[j][curNum],box[j // 3 + (i // 3) * 3][curNum] = 1, 1, 1
        return True

解析

判断行或者列是否有重复相对而言是比较简单的,小方块里没有重复比较难搞,所以借鉴了大神们的写法,感觉他们好厉害啊啊啊
具体过程:
1.整三个99的矩阵保存1-9是否已经出现过(亮点!)
2.双层for循环读入矩阵
3.如果在行或者列,3
3小方块里出现过的数字对应矩阵的行列,小方块里该数字位置更新为1,当出现已经为1数字时,返回false
4.如果没有提前结束,返回true

来源:力扣(LeetCode)
链接:leetcode.cn/problems/va…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。