Skip to content

Commit a9caf56

Browse files
authored
feat: add swift implementation to lcof problem: No.12 (doocs#2864)
1 parent 6bb333d commit a9caf56

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed

lcof/面试题12. 矩阵中的路径/README.md

+60
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,66 @@ public class Solution {
366366
}
367367
```
368368

369+
#### Swift
370+
371+
```swift
372+
class Solution {
373+
private var board: [[Character]]
374+
private var word: String
375+
private var m: Int
376+
private var n: Int
377+
378+
init() {
379+
self.board = []
380+
self.word = ""
381+
self.m = 0
382+
self.n = 0
383+
}
384+
385+
func exist(_ board: [[Character]], _ word: String) -> Bool {
386+
self.board = board
387+
self.word = word
388+
m = board.count
389+
n = board[0].count
390+
391+
for i in 0..<m {
392+
for j in 0..<n {
393+
if dfs(i, j, 0) {
394+
return true
395+
}
396+
}
397+
}
398+
return false
399+
}
400+
401+
private func dfs(_ i: Int, _ j: Int, _ k: Int) -> Bool {
402+
if k == word.count {
403+
return true
404+
}
405+
if i < 0 || i >= m || j < 0 || j >= n || board[i][j] != word[word.index(word.startIndex, offsetBy: k)] {
406+
return false
407+
}
408+
409+
let temp = board[i][j]
410+
board[i][j] = " "
411+
let dirs = [-1, 0, 1, 0, -1]
412+
var ans = false
413+
414+
for l in 0..<4 {
415+
let ni = i + dirs[l]
416+
let nj = j + dirs[l + 1]
417+
if dfs(ni, nj, k + 1) {
418+
ans = true
419+
break
420+
}
421+
}
422+
423+
board[i][j] = temp
424+
return ans
425+
}
426+
}
427+
```
428+
369429
<!-- tabs:end -->
370430

371431
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Solution {
2+
private var board: [[Character]]
3+
private var word: String
4+
private var m: Int
5+
private var n: Int
6+
7+
init() {
8+
self.board = []
9+
self.word = ""
10+
self.m = 0
11+
self.n = 0
12+
}
13+
14+
func exist(_ board: [[Character]], _ word: String) -> Bool {
15+
self.board = board
16+
self.word = word
17+
m = board.count
18+
n = board[0].count
19+
20+
for i in 0..<m {
21+
for j in 0..<n {
22+
if dfs(i, j, 0) {
23+
return true
24+
}
25+
}
26+
}
27+
return false
28+
}
29+
30+
private func dfs(_ i: Int, _ j: Int, _ k: Int) -> Bool {
31+
if k == word.count {
32+
return true
33+
}
34+
if i < 0 || i >= m || j < 0 || j >= n || board[i][j] != word[word.index(word.startIndex, offsetBy: k)] {
35+
return false
36+
}
37+
38+
let temp = board[i][j]
39+
board[i][j] = " "
40+
let dirs = [-1, 0, 1, 0, -1]
41+
var ans = false
42+
43+
for l in 0..<4 {
44+
let ni = i + dirs[l]
45+
let nj = j + dirs[l + 1]
46+
if dfs(ni, nj, k + 1) {
47+
ans = true
48+
break
49+
}
50+
}
51+
52+
board[i][j] = temp
53+
return ans
54+
}
55+
}

0 commit comments

Comments
 (0)