题目描述:
给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
要完成的函数:
vector<vector<int>> generateMatrix(int n)
说明:
1、这道题给定一个整数n,要求生成一个n行n列的正方形矩阵,并且矩阵按顺时针螺旋顺序存放从1到n^2的所有元素。
2、这道题不难,我们前面做的螺旋矩阵1的代码完全可以拿过来改一改,就可以完成本道题目。
我们仍然把矩阵分成一层一层的,按层次填入元素。
代码如下:(附详解)
vector<vector<int>> generateMatrix(int n)
{
int k=0,count=1;//count表示我们要填入的数
vector<vector<int>>res(n,vector<int>(n,0));//最终要返回的二维vector
while(k<=(n-1)/2)//k表示当前处于哪一层
{
for(int i=k;i<=n-1-k;i++)//当前层次中最上面的那条边
{
res[k][i]=count;
count++;
}
for(int i=k+1;i<=n-1-k;i++)//当前层次中最右边的那条边
{
res[i][n-1-k]=count;
count++;
}
for(int i=n-2-k;i>=k;i--)//当前层次中最下面的那条边
{
res[n-1-k][i]=count;
count++;
}
for(int i=n-2-k;i>=k+1;i--)//当前层次中最左边的那条边
{
res[i][k]=count;
count++;
}
k++;//k+1,准备进入下一个层次
}
return res;//最终返回res
}
上述代码实测4ms,beats 99.74% of cpp submissions。