有效的数独

初级算法 - 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)

使用哈希表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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 @   白菜熊猫  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示