Skip to content

Commit 333fabc

Browse files
authored
feat: add swift implementation to lcof problem: No.29 (doocs#2896)
1 parent b2923ee commit 333fabc

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed

lcof/面试题29. 顺时针打印矩阵/README.md

+34
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,40 @@ public class Solution {
326326
}
327327
```
328328

329+
#### Swift
330+
331+
```swift
332+
class Solution {
333+
func spiralOrder(_ matrix: [[Int]]) -> [Int] {
334+
guard !matrix.isEmpty && !matrix[0].isEmpty else {
335+
return []
336+
}
337+
338+
let m = matrix.count
339+
let n = matrix[0].count
340+
var vis = Array(repeating: Array(repeating: false, count: n), count: m)
341+
var ans = [Int]()
342+
var i = 0, j = 0, k = 0
343+
let dirs = [0, 1, 0, -1, 0]
344+
345+
for _ in 0..<m*n {
346+
ans.append(matrix[i][j])
347+
vis[i][j] = true
348+
var x = i + dirs[k], y = j + dirs[k + 1]
349+
if x < 0 || y < 0 || x >= m || y >= n || vis[x][y] {
350+
k = (k + 1) % 4
351+
x = i + dirs[k]
352+
y = j + dirs[k + 1]
353+
}
354+
i = x
355+
j = y
356+
}
357+
358+
return ans
359+
}
360+
}
361+
```
362+
329363
<!-- tabs:end -->
330364

331365
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
func spiralOrder(_ matrix: [[Int]]) -> [Int] {
3+
guard !matrix.isEmpty && !matrix[0].isEmpty else {
4+
return []
5+
}
6+
7+
let m = matrix.count
8+
let n = matrix[0].count
9+
var vis = Array(repeating: Array(repeating: false, count: n), count: m)
10+
var ans = [Int]()
11+
var i = 0, j = 0, k = 0
12+
let dirs = [0, 1, 0, -1, 0]
13+
14+
for _ in 0..<m*n {
15+
ans.append(matrix[i][j])
16+
vis[i][j] = true
17+
var x = i + dirs[k], y = j + dirs[k + 1]
18+
if x < 0 || y < 0 || x >= m || y >= n || vis[x][y] {
19+
k = (k + 1) % 4
20+
x = i + dirs[k]
21+
y = j + dirs[k + 1]
22+
}
23+
i = x
24+
j = y
25+
}
26+
27+
return ans
28+
}
29+
}

0 commit comments

Comments
 (0)