数组——10、有效的数独

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

  1. 数字1-9在每一行只能出现一次;
  2. 数字1-9在每一列只能出现一次;
  3. 数字1-9在每一个以促使线分隔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"]
]
	输出:true

思路:检查每一行、每一列、每一个3x3宫是否符合不存在重复值,若符合,则将该元素添加进去。

class Solution:
    def isValidSudoku(self, board):
    	#没有必要用dict,我们只关系某个数字有没有出现过
    	Row = [[] for i in range(9)]
    	Col = [[] for i in range(9)]
    	Cell = [[] for i in range(9)]
    	#enumerate()函数:用于将一个可遍历的数据对象
    	#(如列表、元组或字符串)组合为一个索引序列,
    	#同时列出数据索引和数据,一般用在for循环中。
    	for i, row in enumerate(board):
    	    for j, num in enumerate(row):
    	        if num != '.':
    	            #3x3宫的确立
    	            k = (i // 3) * 3 + j // 3
    	            #拼接3个list
    	            if num in Row[i] + Col[j] + Cell[k]:
    	            	return False
    	            else:
    	            	Row[i].append(num)
    	            	Col[j].append(num)
    	            	Cell[k].append(num)
    	return True

猜你喜欢

转载自blog.csdn.net/weixin_41605837/article/details/84593187