Skip to content

Commit 459429f

Browse files
authored
feat: add swift implementation to lcci problem: No.08.12 (#2704)
1 parent d994adc commit 459429f

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

lcci/08.12.Eight Queens/README.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,49 @@ public class Solution {
246246
}
247247
```
248248

249+
```swift
250+
class Solution {
251+
private var ans: [[String]] = []
252+
private var col: [Int] = Array(repeating: 0, count: 0)
253+
private var dg: [Int] = Array(repeating: 0, count: 0)
254+
private var udg: [Int] = Array(repeating: 0, count: 0)
255+
private var g: [[String]] = Array(repeating: Array(repeating: ".", count: 0), count: 0)
256+
private var n: Int = 0
257+
258+
func solveNQueens(_ n: Int) -> [[String]] {
259+
self.n = n
260+
col = Array(repeating: 0, count: n)
261+
dg = Array(repeating: 0, count: n * 2)
262+
udg = Array(repeating: 0, count: n * 2)
263+
g = Array(repeating: Array(repeating: ".", count: n), count: n)
264+
dfs(0)
265+
return ans
266+
}
267+
268+
private func dfs(_ i: Int) {
269+
guard i < n else {
270+
let t = g.map { $0.joined() }
271+
ans.append(t)
272+
return
273+
}
274+
for j in 0..<n {
275+
if col[j] + dg[i + j] + udg[n - i + j] == 0 {
276+
g[i][j] = "Q"
277+
col[j] = 1
278+
dg[i + j] = 1
279+
udg[n - i + j] = 1
280+
dfs(i + 1)
281+
col[j] = 0
282+
dg[i + j] = 0
283+
udg[n - i + j] = 0
284+
g[i][j] = "."
285+
}
286+
}
287+
}
288+
289+
}
290+
```
291+
249292
<!-- tabs:end -->
250293

251294
<!-- end -->

lcci/08.12.Eight Queens/README_EN.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,49 @@ public class Solution {
261261
}
262262
```
263263

264+
```swift
265+
class Solution {
266+
private var ans: [[String]] = []
267+
private var col: [Int] = Array(repeating: 0, count: 0)
268+
private var dg: [Int] = Array(repeating: 0, count: 0)
269+
private var udg: [Int] = Array(repeating: 0, count: 0)
270+
private var g: [[String]] = Array(repeating: Array(repeating: ".", count: 0), count: 0)
271+
private var n: Int = 0
272+
273+
func solveNQueens(_ n: Int) -> [[String]] {
274+
self.n = n
275+
col = Array(repeating: 0, count: n)
276+
dg = Array(repeating: 0, count: n * 2)
277+
udg = Array(repeating: 0, count: n * 2)
278+
g = Array(repeating: Array(repeating: ".", count: n), count: n)
279+
dfs(0)
280+
return ans
281+
}
282+
283+
private func dfs(_ i: Int) {
284+
guard i < n else {
285+
let t = g.map { $0.joined() }
286+
ans.append(t)
287+
return
288+
}
289+
for j in 0..<n {
290+
if col[j] + dg[i + j] + udg[n - i + j] == 0 {
291+
g[i][j] = "Q"
292+
col[j] = 1
293+
dg[i + j] = 1
294+
udg[n - i + j] = 1
295+
dfs(i + 1)
296+
col[j] = 0
297+
dg[i + j] = 0
298+
udg[n - i + j] = 0
299+
g[i][j] = "."
300+
}
301+
}
302+
}
303+
304+
}
305+
```
306+
264307
<!-- tabs:end -->
265308

266309
<!-- end -->
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
private var ans: [[String]] = []
3+
private var col: [Int] = Array(repeating: 0, count: 0)
4+
private var dg: [Int] = Array(repeating: 0, count: 0)
5+
private var udg: [Int] = Array(repeating: 0, count: 0)
6+
private var g: [[String]] = Array(repeating: Array(repeating: ".", count: 0), count: 0)
7+
private var n: Int = 0
8+
9+
func solveNQueens(_ n: Int) -> [[String]] {
10+
self.n = n
11+
col = Array(repeating: 0, count: n)
12+
dg = Array(repeating: 0, count: n * 2)
13+
udg = Array(repeating: 0, count: n * 2)
14+
g = Array(repeating: Array(repeating: ".", count: n), count: n)
15+
dfs(0)
16+
return ans
17+
}
18+
19+
private func dfs(_ i: Int) {
20+
guard i < n else {
21+
let t = g.map { $0.joined() }
22+
ans.append(t)
23+
return
24+
}
25+
for j in 0..<n {
26+
if col[j] + dg[i + j] + udg[n - i + j] == 0 {
27+
g[i][j] = "Q"
28+
col[j] = 1
29+
dg[i + j] = 1
30+
udg[n - i + j] = 1
31+
dfs(i + 1)
32+
col[j] = 0
33+
dg[i + j] = 0
34+
udg[n - i + j] = 0
35+
g[i][j] = "."
36+
}
37+
}
38+
}
39+
40+
}

0 commit comments

Comments
 (0)