-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy path498_Diagonal_Traverse.swift
52 lines (47 loc) · 1.25 KB
/
498_Diagonal_Traverse.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
41
42
43
44
45
46
47
48
49
50
51
52
//
// 498. 对角线遍历
//
// 题目链接:https://leetcode-cn.com/problems/diagonal-traverse/
// 标签:数组
// 要点:寻找二维数组下标规律
// 时间复杂度:O(m * n)
// 空间复杂度:O(m * n)
import Foundation
class Solution {
func findDiagonalOrder(_ matrix: [[Int]]) -> [Int] {
let m = matrix.count
guard m > 0 else { return [] }
let n = matrix[0].count
guard n > 0 else { return [] }
var res = [Int]()
var x = 0
var y = 0
for _ in 0 ..< (m * n) {
res.append(matrix[x][y])
if (x+y) % 2 == 0 {
if y == n - 1 {
x += 1
} else if x == 0 {
y += 1
} else {
x -= 1
y += 1
}
} else {
if x == m - 1 {
y += 1
} else if y == 0 {
x += 1
} else {
x += 1
y -= 1
}
}
}
return res
}
}
// Tests
let s = Solution()
let matrix = [[ 1, 2, 3 ],[ 4, 5, 6 ],[ 7, 8, 9 ]]
assert(s.findDiagonalOrder(matrix) == [1,2,4,7,5,3,6,8,9])