力扣 37. 解数独
class Solution:
def solveSudoku(self, board: List[List[str]]) -> None:
"""
Do not return anything, modify board in-place instead.
"""
target = []
row = {}
col = {}
block = [[list() for j in range(0, 3)] for i in range(0,3)]
for i in range(len(board)):
for j in range(len(board[0])):
if board[i][j] == ".":
target.append([i,j])
else:
try:
row[i].append(board[i][j])
except:
row[i] = list(board[i][j])
try:
col[j].append(board[i][j])
except:
col[j] = list(board[i][j])
block[i//3][j//3].append(board[i][j])
self.helper(board, target, col, row , block)
def helper(self, board, target, col, row, block):
if not len(target):
return True
iterator = [str(i) for i in range(1,10)]
iterator = set(iterator) - set(row.get(target[0][0]))
iterator = iterator - set(col.get(target[0][1]))
iterator = list(iterator - set(block[target[0][0]//3][target[0][1]//3]))
for i in iterator:
board[target[0][0]][target[0][1]] = i
row.get(target[0][0]).append(i)
col.get(target[0][1]).append(i)
block[target[0][0]//3][target[0][1]//3].append(i)
if self.helper(board, target[1:], col, row, block):
return True
board[target[0][0]][target[0][1]] = "."
row.get(target[0][0]).pop()
col.get(target[0][1]).pop()
block[target[0][0]//3][target[0][1]//3].pop()
return False