• 36. Valid Sudoku


    Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

    1. Each row must contain the digits 1-9 without repetition.
    2. Each column must contain the digits 1-9 without repetition.
    3. Each of the 9 3x3 sub-boxes of the grid must contain the digits 1-9 without repetition.

    avatag

    A partially filled sudoku which is valid.

    The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

    Example 1:

    Input:
    [
    ["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"]
    ]
    Output: true

    Example 2:

    Input:
    [
    ["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"]
    ]
    Output: false
    Explanation: Same as Example 1, except with the 5 in the top left corner being
    modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is invalid.

    Note:

    • A Sudoku board (partially filled) could be valid but is not necessarily solvable.
    • Only the filled cells need to be validated according to the mentioned rules.
    • The given board contain only digits 1-9 and the character '.'.
    • The given board size is always 9x9.
    class Solution:
        def isValidSudoku(self, board):
            """
            :type board: List[List[str]]
            :rtype: bool
            """
            def line():
                for i in range(9):
                    ans = [0 for _ in range(10)]
                    for j in range(9):
                        if board[i][j]=='.':
                            continue
                        ans[int(board[i][j])] += 1
                    for t in ans:
                        if t>1:
                            return False
                return True
            def coloum():
                for j in range(9):
                    ans = [0 for _ in range(10)]
                    for i in range(9):
                        if board[i][j]=='.':
                            continue
                        ans[int(board[i][j])] += 1
                    # print(j,'
    ',ans)
                    for t in ans:
                        if t>1:
                            return False
                return True
            def boxes(a,b,c,d):
                ans = [0 for _ in range(10)]
                for i in range(a,b):
                    for j in range(c,d):
                        if board[i][j]=='.':
                            continue
                        ans[int(board[i][j])] += 1
                for t in ans:
                    if t>1:
                        return False
                return True
            if line() and coloum() and boxes(0,3,0,3) and boxes(3,6,0,3) and boxes(6,9,0,3) and boxes(0,3,3,6) and boxes(3,6,3,6) and boxes(6,9,3,6) and boxes(0,3,6,9) and boxes(3,6,6,9) and boxes(6,9,6,9):
                return True
            return False
    
  • 相关阅读:
    陶哲轩实分析 习题 7.1.5
    java程序员必知的 8大排序
    java抽象类
    公式解析器开源项目整理
    大并发处理解决方案
    让Java代码跑得更快
    Java基础知识 (扫盲)
    一道多线程题目的解决方案
    如何优化JAVA程序设计和编码,提高JAVA性能
    词法分析(NFA与DFA)
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9791920.html
Copyright © 2020-2023  润新知