题目
思路分析
题目要求:判断数独是否合法
- 设置 每行 每列 每个方格 都先分配一个空集合
- 特别是 每个方格的唯一标识的处理
- 遍历每一个数,如果不在集合中加入,否则退出false
代码展示
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
#设置 每行 每列 每个方格 都先分配一个空集合
hangset = [set() for i in range(9)]
lieset = [set() for i in range(9)]
juzhengset = [set() for i in range(9)]
for i in range(9):
for j in range(9):
# board[i][j]表示当前i行j列的位置的元素
juzheng = (i//3)*3+(j//3)
#通过juzheng这个变量来判定不同的方格
if board[i][j] !='.':
#如果当前元素不在对应的集合中,加入
if board[i][j] not in hangset[i] and board[i][j] not in lieset[j] and board[i][j] not in juzhengset[juzheng]:
hangset[i].add(board[i][j])
lieset[j].add(board[i][j])
juzhengset[juzheng].add(board[i][j])
#如果当前元素在集合中,说明重复,报错
else:
return False
return True