class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
def could_place(row, col):
return not (cols[col] + rows[row] + right_diagonal[col - row] + left_diagonal[row + col])
def place_queen(row, col):
cols[col] = 1
rows[row] = 1
right_diagonal[col - row] = 1
left_diagonal[col + row] = 1
positions.add((row, col))
def remove_queen(row, col):
cols[col] = 0
rows[row] = 0
right_diagonal[col - row] = 0
left_diagonal[col + row] = 0
positions.remove((row, col))
def add_solution():
solution = []
for _, col in sorted(positions):
solution.append('.' * col + 'Q' + '.' * (n - 1 - col))
output.append(solution)
def backtrack(row = 0):
for col in range(n):
if could_place(row, col):
place_queen(row, col)
if row == n - 1:
add_solution()
else:
backtrack(row + 1)
remove_queen(row, col)
cols = [0] * n
rows = [0] * n
right_diagonal = [0] * (n * 2 - 1)
left_diagonal = [0] * (n * 2 - 1)
positions = set()
output = []
backtrack()
return output
leetcode刷题python之N皇后
最新推荐文章于 2020-11-26 09:53:22 发布