-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathLC0059.cpp
More file actions
executable file
·36 lines (31 loc) · 782 Bytes
/
LC0059.cpp
File metadata and controls
executable file
·36 lines (31 loc) · 782 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
31
32
33
34
35
36
/*
Problem Statement: https://leetcode.com/problems/spiral-matrix-ii/
Time: O(n²)
Space: O(n²)
Author: Mohammed Shoaib, github.com/Mohammed-Shoaib
*/
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
int x, y, dir;
x = y = dir = 0;
vector<vector<int>> matrix(n, vector<int>(n));
// traverse directions easily
vector<int> xdir = {0, 1, 0, -1};
vector<int> ydir = {1, 0, -1, 0};
// helper function
function<bool(int, int)> valid = [&](int x, int y) {
return x >= 0 && x < n
&& y >= 0 && y < n
&& matrix[x][y] == 0;
};
for (int k = 1; k <= n * n; k++) {
matrix[x][y] = k;
if (!valid(x + xdir[dir], y + ydir[dir]))
dir = (dir + 1) % xdir.size();
x += xdir[dir];
y += ydir[dir];
}
return matrix;
}
};