-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Expand file tree
/
Copy pathspiral-matrix-iv.cpp
More file actions
22 lines (21 loc) · 822 Bytes
/
spiral-matrix-iv.cpp
File metadata and controls
22 lines (21 loc) · 822 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Time: O(m * n)
// Space: O(1)
// linked list, array
class Solution {
public:
vector<vector<int>> spiralMatrix(int m, int n, ListNode* head) {
static const vector<pair<int, int>> directions = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
vector<vector<int>> result(m, vector<int>(n, -1));
for (int i = 0, j = 0, d = 0; head; head = head->next) {
result[i][j] = head->val;
if (!(0 <= i + directions[d].first && i + directions[d].first < m &&
0 <= j + directions[d].second && j + directions[d].second < n &&
result[i + directions[d].first][j + directions[d].second] == -1)) {
d = (d + 1) % 4;
}
i += directions[d].first;
j += directions[d].second;
}
return result;
}
};