leetcode刷题-36有效的数独

题目

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

思路

最简单首先比较每一行,比较每一列,再比较每一个方块,实现方法比较简单,但效率很低。

由于二维数组在列和方块的取值都设置循环操作,因此可以在一个循环中将值取出,放入不同的容器等待判定。

因此可以分别创建行,列,方块的3个二维数组,从头到尾读取数独中的数据,将其分别放入。

代码如下

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        line = [[]for i in range(9)]
        arr = [[]for i in range(9)]
        chunk = [[]for i in range(9)]
        vex = len(board)
        for i in range(vex):
            for j in range(vex):
                get = board[i][j]
                k = i//3*3+j//3
                if get is not '.':
                    if get in line[i] or get in arr[j] or get in chunk[k]:
                        return False
                    line[i].append(get)
                    arr[j].append(get)
                    chunk[k].append(get)
        return True

有效的提高了执行效率

posted @ 2020-08-02 11:58  maoguai  阅读(112)  评论(0编辑  收藏  举报