zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    PowerDesigner学习 ---- 系列文章
    PowerDesigner基础使用 ---- 入门学习
    PowerDesigner ---- 数据库设计(概念模型CDM和物理模型PDM)
    PowerDesigner V16.5 安装及汉化
    在树莓派是安装并配置NTP服务
    RESTful Web API 理解
    Linux或树莓派3——挂载U盘、移动硬盘并设置rwx权限
    开启树莓派自带的VNC功能
    c#代码获取web.config配置文件里面设置的 <compilation debug="true"节点
    WebService的web客户端同步、异步、多线程向服务端传入参数的数据交互方式
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/15463325.html
Copyright © 2011-2022 走看看