---
# System prepended metadata

title: Leetcode 51

---

# Leetcode 51

```python=
class Solution:
    def solveNQueens(self, n: int) -> List[List[str]]:
        self.anss = []
        ans = [0] * n
        col = [False] * n
        topRight = [False] * (2 * n - 1)
        topLeft = [False] * (2 * n - 1)
        self.search(0, n, ans, col, topRight, topLeft)
        res = []
        for a in self.anss:
            res.append([])
            for c in a:
                s = ["."] * n
                s[c] = "Q"
                res[-1].append("".join(s))
        return res
        
    def search(self, cur, n, ans, col, topRight, topLeft):
        if cur == n:
            self.anss.append(ans.copy())
            return
        
        for i in range(n):
            if col[i]:
                continue
            if topRight[cur + i]:
                continue
            if topLeft[i - cur + n - 1]:
                continue
            col[i] = True
            topRight[cur + i] = True
            topLeft[i - cur + n - 1] = True
            ans[cur] = i
            self.search(cur + 1, n, ans, col, topRight, topLeft)
            col[i] = False
            topRight[cur + i] = False
            topLeft[i - cur + n - 1] = False

```