forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.swift
40 lines (37 loc) · 1.18 KB
/
Solution.swift
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
37
38
39
40
class Solution {
private var ans: [[String]] = []
private var col: [Int] = Array(repeating: 0, count: 0)
private var dg: [Int] = Array(repeating: 0, count: 0)
private var udg: [Int] = Array(repeating: 0, count: 0)
private var g: [[String]] = Array(repeating: Array(repeating: ".", count: 0), count: 0)
private var n: Int = 0
func solveNQueens(_ n: Int) -> [[String]] {
self.n = n
col = Array(repeating: 0, count: n)
dg = Array(repeating: 0, count: n * 2)
udg = Array(repeating: 0, count: n * 2)
g = Array(repeating: Array(repeating: ".", count: n), count: n)
dfs(0)
return ans
}
private func dfs(_ i: Int) {
guard i < n else {
let t = g.map { $0.joined() }
ans.append(t)
return
}
for j in 0..<n {
if col[j] + dg[i + j] + udg[n - i + j] == 0 {
g[i][j] = "Q"
col[j] = 1
dg[i + j] = 1
udg[n - i + j] = 1
dfs(i + 1)
col[j] = 0
dg[i + j] = 0
udg[n - i + j] = 0
g[i][j] = "."
}
}
}
}