-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path54.cpp
More file actions
30 lines (30 loc) · 869 Bytes
/
Copy path54.cpp
File metadata and controls
30 lines (30 loc) · 869 Bytes
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
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>> &matrix) {
int m = matrix.size(), n = m == 0 ? 0 : matrix[0].size(), x = 0, y = 0;
if (m == 0)
return {};
vector<int> dir_x = {0, 1, 0, -1}, dir_y = {1, 0, -1, 0}, ret;
int dir = 0, i = 0, j = 0, k = m * n;
while (k > 0) {
ret.push_back(matrix[i][j]);
if (j + dir_y[dir] >= n) {
++dir;
++x;
} else if (j + dir_y[dir] < y) {
++dir;
--m;
} else if (i + dir_x[dir] >= m) {
++dir;
--n;
} else if (i + dir_x[dir] < x) {
dir = 0;
++y;
}
i += dir_x[dir];
j += dir_y[dir];
--k;
}
return ret;
}
};