📜  算法测验| Sudo放置:设置1 |问题8(1)

📅  最后修改于: 2023-12-03 15:41:09.920000             🧑  作者: Mango

算法测验 | Sudo放置:设置1 | 问题8

在Sudo放置游戏中,问题8需要我们判断一个 9x9 的数独是否合法。即:

  • 每一行的数字不能重复
  • 每一列的数字不能重复
  • 每个 3x3 的九宫格内的数字不能重复

以下是一个数独的例子:

[[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]]

以下是代码示例,我们可以使用3个数组来记录每一行、每一列和每个小九宫格中出现的数字情况,遍历每个空格并更新数组状态,当发现某个空格填入的数字重复时就说明数独不合法了:

def isValidSudoku(board):
    rows = [set() for _ in range(9)]
    cols = [set() for _ in range(9)]
    boxes = [set() for _ in range(9)]
    
    for i in range(9):
        for j in range(9):
            num = board[i][j]
            if num != " ":
                if num in rows[i]:
                    return False
                else:
                    rows[i].add(num)
                    
                if num in cols[j]:
                    return False
                else:
                    cols[j].add(num)
                    
                index = i // 3 * 3 + j // 3
                if num in boxes[index]:
                    return False
                else:
                    boxes[index].add(num)
                    
    return True