有效的数独

初级算法 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台

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

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

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

36. 有效的数独 - 力扣(Leetcode)

使用哈希表:

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        row = [[0]*10 for _ in range(9)]
        colums = [[0]*10 for _ in range(9)]
        boxs = [[0]*10 for _ in range(9)]

        num = 0
        for i in range(9):
            for j in range(9):
                num = board[i][j]
                if num == '.':
                    continue
                num = int(num)
                if row[i][num] ==1 or colums[j][num] ==1 or boxs[j//3+(i//3)*3][num]==1:
                    return False
                else:
                    row[i][num] =1
                    colums[j][num] =1
                    boxs[j//3+(i//3)*3][num]=1
        return True

 

 

 

 

 方法二:分别对行、列、小盒子进行遍历:

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        for i in range(9):
            stor = []                     
            for j in range(9):
                if board[i][j] == '.':
                    continue
                if board[i][j] in stor:
                    return False
                else:
                    stor.append(board[i][j])

        for i in range(0,9):
            stor = []
            for j in range(0,9):
                if board[j][i] =='.':
                    continue
                if board[j][i] in stor:
                    return False
                else:
                    stor.append(board[j][i])

        for i in range(0,9,3):
            for j in range(0,9,3):
                stor = []
                for x in range(i,i+3):
                    for y in range(j,j+3):
                        if board[x][y] == '.':
                            continue
                        if board[x][y] in stor:
                            return False
                        else:
                            stor.append(board[x][y])
        return True

 

posted @ 2023-03-15 11:37  白菜熊猫  阅读(24)  评论(0)    收藏  举报