Problem
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Algorithm
Backtracking. Using bits save state and compress into three numbers.
Code
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
ans = []
visit = [-1] * n
def dfs(k, n, L, C, R):
if k == n:
board = []
for i in range(n):
row = ""
for j in range(n):
if j == visit[i]:
row += "Q"
else:
row += "."
board.append(row)
ans.append(board)
return
for i in range(n):
if visit[i] == -1 and (L|C|R)&(1<<i) != (1<<i):
visit[i] = k
dfs(k+1, n, (L|1<<i)<<1, C|1<<i, (R|1<<i)>>1)
visit[i] = -1
dfs(0, n, 0, 0, 0)
return ans