cols = set()
def backtrack(row):
# base case
# TODO
for col in range(n):
if col not in cols:
cols.add(col)
board[row][col] = "Q"
backtrack(row + 1)
board[row][col] = "."
cols.remove(col)
cols = set()
def backtrack(row):
# base case
# TODO
for col in range(n):
# TODO:
# diagonal_is_valid and anti_diagonal_is_valid
if col not in cols and diagonal_is_valid and anti_diagonal_is_valid:
cols.add(col)
board[row][col] = "Q"
backtrack(row + 1)
board[row][col] = "."
cols.remove(col)
res = []
board = [['.'] * n for _ in range(n)]
cols = set()
diagonals = set()
anti_diagonals = set()
def backtrack(row):
# base case
# TODO
for col in range(n):
curr_diagonal = row - col
curr_anti_diagonal = row + col
if (col not in cols and
curr_diagonal not in diagonals and
curr_anti_diagonal not in anti_diagonals):
cols.add(col)
diagonals.add(curr_diagonal)
anti_diagonals.add(curr_anti_diagonal)
board[row][col] = "Q"
backtrack(row + 1)
board[row][col] = "."
anti_diagonals.remove(curr_anti_diagonal)
diagonals.remove(curr_diagonal)
cols.remove(col)
# n - 1 是最後一列
if row == n:
res.append([''.join(r) for r in board])
return
最後的程式碼整理起來如下:
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
res = []
board = [['.'] * n for _ in range(n)]
cols = set()
diagonals = set()
anti_diagonals = set()
def backtrack(row):
if row == n:
res.append([''.join(r) for r in board])
return
for col in range(n):
curr_diagonal = row - col
curr_anti_diagonal = row + col
# a queen has been placed in all directions
if (col not in cols and
curr_diagonal not in diagonals and
curr_anti_diagonal not in anti_diagonals):
cols.add(col)
diagonals.add(curr_diagonal)
anti_diagonals.add(curr_anti_diagonal)
board[row][col] = "Q"
backtrack(row + 1)
board[row][col] = "."
anti_diagonals.remove(curr_anti_diagonal)
diagonals.remove(curr_diagonal)
cols.remove(col)
backtrack(0)
return res