输入: 4 输出: [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."],
["..Q.", // 解法 2 "Q...", "...Q", ".Q.."] ]
解释: 4 皇后问题存在两个不同的解法。
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
def could_place(row, col):
return not (cols[col]+hill_diagonals[row-col]+dale_diagonals[row+col])
def place(row, col):
queens.add((row, col))
cols[col] = 1
hill_diagonals[row-col] = 1
dale_diagonals[row+col] = 1
def remove_queen(row, col):
queens.remove((row, col))
cols[col] = 0
hill_diagonals[row-col] = 0
dale_diagonals[row+col] = 0
def add_solution():
solution = []
for _, col in sorted(queens):
solution.append('.'*col+'Q'+'.'*(n-col-1))
output.append(solution)
def backtrack(row):
for col in range(n):
if could_place(row, col):
place(row, col)
if row+1 == n:
add_solution()
else:
backtrack(row+1)
remove_queen(row, col)
cols = [0]*n
hill_diagonals = [0]*(2*n-1)
dale_diagonals = [0]*(2*n-1)
queens = set()
output = []
backtrack(0)
return output
Runtime: 64 ms, faster than 83.25% of Python3 online submissions for N-Queens.
Memory Usage: 13.2 MB, less than 100.00% of Python3 online submissions for N-Queens.