0%

59. Spiral Matrix II

59. Spiral Matrix II

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ret(n, vector<int>(n));
int top = 0, bottom = n - 1, left = 0, right = n - 1;
int num = 1;
while(num <= n * n)
{
for(int i = left; i <= right; ++i)
ret[top][i] = num++;
++top;
for(int i = top; i <= bottom; ++i)
ret[i][right] = num++;
--right;
for(int i = right; i >= left; --i)
ret[bottom][i] = num++;
--bottom;
for(int i = bottom; i >= top; --i)
ret[i][left] = num++;
++left;
}
return ret;
}
};
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ret(n, vector<int>(n, 0));
int dir[][2]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
int d = 0;
int m = 0, k = 0;
for(int i = 1; i <= n * n; ++i)
{
ret[m][k] = i;
int nextm = m + dir[d][0];
int nextk = k + dir[d][1];
if(nextm < 0 || nextm >= n || nextk < 0 || nextk >= n || ret[nextm][nextk] > 0)
d = (d + 1) % 4;
m += dir[d][0];
k += dir[d][1];
}
return ret;
}
};