当前位置 博文首页 > dastu的博客:有效的数独(python)---leetcode36

    dastu的博客:有效的数独(python)---leetcode36

    作者:[db:作者] 时间:2021-09-19 19:27

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

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

    数独部分空格内已填入了数字,空白格用?'.'?表示。

    示例?1:

    输入:
    [
    ? ["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:

    输入:
    [
    ??["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 存在, 因此这个数独是无效的。
    说明:

    一个有效的数独(部分已被填充)不一定是可解的。
    只需要根据以上规则,验证已经填入的数字是否有效即可。
    给定数独序列只包含数字?1-9?和字符?'.'?。
    给定数独永远是?9x9?形式的。

        def isValidSudoku(self, board: List[List[str]]) -> bool:
            rows=[{} for i in range(9)]
            columns=[{} for i in range(9)]
            boxes=[{} for i in range(9)]
            for r in range (9):
                for c in range(9):
                    num=board[r][c]
                    if num!='.':
                        num=int(num)
                        box_num=r//3*3+c//3
                        rows[r][num]=rows[r].get(num,0)+1
                        columns[c][num]=columns[c].get(num,0)+1
                        boxes[box_num][num]=boxes[box_num].get(num,0)+1
                        if rows[r][num]>=2:
                            return False
                        if columns[c][num]>=2:
                            return False
                        if boxes[box_num][num]>=2:
                            return False
            return True

    ?

    cs