leetcode-有效的数独(medium)


Problem description

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

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


数独部分空格内已填入了数字,空白格用 ‘.’ 表示。

示例1:

输入:
[
  ["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:

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

一个有效的数独(部分已被填充)不一定是可解的。
只需要根据以上规则,验证已经填入的数字是否有效即可。
给定数独序列只包含数字 1-9 和字符 ‘.’ 。
给定数独永远是 9x9 形式的。

Solution

3个维度的字典:行,列,块。

class Solution:
    def isValidSudoku(self, board):
        rows = [{} for i in range(9)]
        columns = [{} for i in range(9)]
        boxs = [{} for i in range(9)]

        for i in range(9):
            for j in range(9):
                num = board[i][j]
                if num != '.':
                    num = int(num)
                    boxIndex = (i // 3) * 3 + j // 3
                    rows[i][num] = rows[i].get(num, 0) + 1
                    columns[j][num] =columns[j].get(num, 0) + 1
                    boxs[boxIndex][num] =boxs[boxIndex].get(num, 0) + 1
                    if rows[i][num] > 1 or columns[j][num] > 1 or boxs[boxIndex][num] > 1:
                        return False
        return True

评论
 Previous
life's an open door life's an open door
Open DoorI’ve seen mountainsI’ve seen breachesDistant seasUncharted beachesI’ve seen lightFrom many welcome portsI’ve be
2020-10-23
Next 
信条中的钳形行动 信条中的钳形行动
电影的信息量实在太大,对影片的一些想法和理解是出了影院才想通的。信条中的钳形行动非常有趣,也是理解影片的一个比较大的难点,在这里记录一下自己的理解和想法。 时间流虽然说影片里的人和物品时间倒退是基于物理中的熵增熵减,但是个人觉得用时间流来解
2020-09-12
  TOC