题目描述
给定一个正整数 n,生成一个包含 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
样例
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
分析
这是经典的数组题,题目看起来简单,但做起来的时候,很容易因为边界的问题搞到自己十分混乱。这里我推荐一下我的做法,首先是按圈来排列数字,然后把一圈拆成四个步骤,现实从左到右,然后再从上到下,再从右到左,最后从下到上这样按顺序的四步,完成一圈。按这样的顺序走,出错的概率就会少一点。
代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ans(n, vector(n, 0));
int row = 0, col = 0;
int count = 1, round = n - 1;
while (row <= round && col <= round) {
for (int i = col; i <= round; i++) {
ans[row][i] = count;
count++;
}
for (int i = row + 1; i <= round; i++) {
ans[i][round] = count;
count++;
}
if (row < round && col < round) {
for (int i = round - 1; i > col; i--) {
ans[round][i] = count;
count++;
}
for (int i = round; i > row; i--) {
ans[i][col] = count;
count++;
}
}
row++;
col++;
round--;
}
return ans;
}
};