## DEV Community

Abhishek Chaudhary

Posted on

# N-Queens

The n-queens puzzle is the problem of placing `n` queens on an `n x n` chessboard such that no two queens attack each other.

Given an integer `n`, return all distinct solutions to the n-queens puzzle. You may return the answer in any order.

Each solution contains a distinct board configuration of the n-queens' placement, where `'Q'` and `'.'` both indicate a queen and an empty space, respectively.

Example 1:

Input: n = 4
Output: [[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above

Example 2:

Input: n = 1
Output: [["Q"]]

Constraints:

• `1 <= n <= 9`

SOLUTION:

``````class Solution:
def getAllPos(self, usedCols, usedPosDiag, usedNegDiag, i, n):
if i >= n:
return [[]]
op = []
for j in range(n):
if j not in usedCols and (i + j) not in usedPosDiag and (i - j) not in usedNegDiag:
val = self.getAllPos(usedCols.union({j}), usedPosDiag.union({i + j}), usedNegDiag.union({i - j}), i + 1, n)
op += [[j] + v for v in val]
return op

def getRow(self, i, n):
val = ["."] * n
val[i] = "Q"
return "".join(val)

def solveNQueens(self, n: int) -> List[List[str]]:
queens = self.getAllPos(set(), set(), set(), 0, n)
return [[self.getRow(i, n) for i in q] for q in queens]
``````