• 36. 有效的数独


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

    数字 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 存在, 因此这个数独是无效的。
     

    提示:

    board.length == 9
    board[i].length == 9
    board[i][j] 是一位数字或者 '.'

    常规写法(行, 列, 小数独遍历判断是否重复)

    from collections import defaultdict
    class Solution:
        def isValidSudoku(self, board) -> bool:
            # 数独
            rows, cols = defaultdict(set), defaultdict(set) # 行, 列
            c = defaultdict(set) # 小数独
    
            # 计数大于1, 则返回false
            for i in range(9):
                for j in range(9):
                    if board[i][j] == '.':
                        continue # 无需判断
    
                    # 小数独
                    c_index = i // 3 * 3 + j // 3 # 上面i占的小数独数量 + 下面j占的小数独数量 
    
                    # rows[0], rows[1]... rows[8] 判断是否存在重复数字
                    if (board[i][j] in rows[i]) or (board[i][j] in cols[j]) or (board[i][j] in c[c_index]):
                        return False
    
                    rows[i].add(board[i][j])
                    cols[j].add(board[i][j])
                    c[c_index].add(board[i][j])
                
            return True
  • 相关阅读:
    将js进行到底:node学习1
    mui开发app前言(一)
    用kotlin方式打开《第一行代码:Android》之开发酷欧天气(最终版)
    用kotlin方式打开《第一行代码:Android》之开发酷欧天气(2)
    用kotlin方式打开《第一行代码:Android》之开发酷欧天气(1)
    062、如何使用flannel host-gw backend(2019-04-02 周二)
    061、flannel的连通与隔离(2019-04-01 周一)
    060、在docker中使用flannel(2019-03-29 周五)
    059、安装配置flannel(2019-03-28 周四)
    058、flannel概述(2019-03-27 周三)
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/15463325.html
Copyright © 2020-2023  润新知