给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
题目链接: https://leetcode-cn.com/problems/spiral-matrix-ii/
设置 4 个边界:l, r, t, b,分别代表左右上下的边界,然后从左到右、从上到下、从右到左、从下到上填充数组,设置一个变量 num 初始化为 1,表示当前要填充的数字,每填充一次 num+1。每填充一行或一列后要对边界进行更新。例如,从左到右填充一行后,此时 t 要更新为 t+1,因为少了一行,其他类似。
代码如下:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> v(n, vector<int>(n, 0));
int l = 0, r = n-1, t = 0, b = n-1;
int num = 1;
while(num<=n*n){
for(int i=l; i<=r; i++) v[t][i] = num++;
t++;
for(int i=t; i<=b; i++) v[i][r] = num++;
r--;
for(int i=r; i>=l; i--) v[b][i] = num++;
b--;
for(int i=b; i>=t; i--) v[i][l] = num++;
l++;
}
return v;
}
};
原文:https://www.cnblogs.com/flix/p/13166885.html