-
-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy path0051-n-queens.py
More file actions
36 lines (30 loc) · 994 Bytes
/
0051-n-queens.py
File metadata and controls
36 lines (30 loc) · 994 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# time complexity: O(n!)
# space complexity: O(n^2)
from typing import List
class Solution:
def solveNQueens(self, n: int) -> List[List[str]]:
result = []
board = [['.'] * n for _ in range(n)]
colSet = set()
posDiagonal = set()
negDiagonal = set()
def backtrack(r: int):
if r == n:
copy = ["".join(row) for row in board]
result.append(copy)
for c in range(n):
if c in colSet or (r + c) in posDiagonal or (r - c) in negDiagonal:
continue
colSet.add(c)
posDiagonal.add(r + c)
negDiagonal.add(r - c)
board[r][c] = 'Q'
backtrack(r+1)
colSet.remove(c)
posDiagonal.remove(r + c)
negDiagonal.remove(r - c)
board[r][c] = '.'
backtrack(0)
return result
n = 4
print(Solution().solveNQueens(n))