1. 题意
螺旋矩阵I的低配版本,螺旋输出一个矩阵,只不过这个矩阵直接成了方阵。
2. 题解
同样一层一层的分析,有
⌈
R
O
W
S
2
⌉
=
⌈
C
O
L
S
2
⌉
=
N
2
\lceil \frac{ROWS}{2}\rceil=\lceil \frac{COLS}{2}\rceil =\frac{N}{2}
⌈2ROWS⌉=⌈2COLS⌉=2N
层。
第
k
k
k层每个方向需要输出
N
+
1
−
2
i
N+1-2i
N+1−2i个数。
注意,当
2
∤
N
2 \nmid N
2∤N时,我们需要额外输出最中间那个数。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans;
for ( int i = 0;i < n; ++i) {
vector tmp(n,0);
ans.push_back(tmp);
}
int x = 0;
int y = 0;
int cnt = 0;
int steps = n - 1;
int totSteps = n * n;
while (steps && cnt < totSteps) {
int rs = steps;
while (cnt < totSteps && rs--) {
ans[x][y] = ++cnt;
y++;
}
int ds = steps;
while (cnt < totSteps && ds--) {
ans[x][y] = ++cnt;
x++;
}
int ls = steps;
while (cnt < totSteps && ls--) {
ans[x][y] = ++cnt;
y--;
}
int us = steps;
while (cnt < totSteps && us--) {
ans[x][y] = ++cnt;
x--;
}
x++;
y++;
steps -= 2;
}
if (0 == steps) {
ans[x][y] = ++cnt;
}
return ans;
}
};