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;}
};