leetcode -- 36.有效的数独

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

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

上图是一个部分填充的有效的数独。

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

解题思路:主要采用set这种数据结构,集合(set)是一个无序的不重复元素序列。

三种不重复的情况,行可以存为(行数,数据),列可以存为(数据,列数),然后3*3的小格子可以存为(行数//3, 列数//3, 数据),用以区分

 1 class Solution(object):
 2     def isValidSudoku(self, board):
 3         """
 4         :type board: List[List[str]]
 5         :rtype: bool
 6         """
 7         big = set()
 8         for i in range(0,9):
 9             for j in range(0,9):
10                 cur = board[i][j]
11                 if cur != ".":
12                     if (i, cur) in big or (cur, j) in big or (i//3, j//3, cur) in big:
13                         return False
14                     big.add((i, cur))
15                     big.add((cur, j))
16                     big.add((i//3, j//3, cur))
17         return True

 

posted @ 2019-02-27 21:57  夜雨声入眠  阅读(108)  评论(0编辑  收藏  举报