判断一个9x9的数独是否有效。根据以下规则,验证已经填入的数字是否有效。
- 数字1-9在每一行只能出现一次;
- 数字1-9在每一列只能出现一次;
- 数字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