美文网首页
有效的数独

有效的数独

作者: HaiYi_ | 来源:发表于2019-06-21 15:29 被阅读0次

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

    1. 数字 1-9 在每一行只能出现一次。
    2. 数字 1-9 在每一列只能出现一次。
    3. 数字 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 存在, 因此这个数独是无效的。</pre>

    说明:

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

    代码:

    class Solution:
        def isValidSudoku(self, board):
            # row,col,cell分别代表行,列,3x3单元格
            row, col, cell = [{}, {}, {}, {}, {}, {}, {}, {}, {}], \
                             [{}, {}, {}, {}, {}, {}, {}, {}, {}], \
                             [{}, {}, {}, {}, {}, {}, {}, {}, {}]
            for x in range(9):
                for y in range(9):
                    # 取得单元格
                    num = 3 * (x // 3) + y // 3
                    temp = board[x][y]
                    # 不需要存入 '.'
                    if temp != '.':
                        if (temp not in row[x] and temp not in col[y] and temp not in cell[num]):
                            row[x][temp] = '1'
                            col[y][temp] = '1'
                            cell[num][temp] = '1'
                        else:
                            return False
            return True
    
    
    if __name__ == '__main__':
        lsi1 = [
            ["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"]
        ]
        S = Solution()
        s = S.isValidSudoku(lsi1)
        print(s)
    
    

    相关文章

      网友评论

          本文标题:有效的数独

          本文链接:https://www.haomeiwen.com/subject/iqoyqctx.html