难度中等
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
解题思路: 从外圈画到内圈,循环次数为n / 2,第一轮循环从[0][0]开始,从左到右,从上到下,从右到左,从下到上完成一圈赋值,第二轮循环从[1][1]开始,开始第二圈赋值,指导第n / 2次循环完成。当n 为单数时,[n / 2][n / 2]位置还未赋值。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> result(n,vector<int>(n,0));
int stax = 0, stay = 0;//定义起始位置
int count = 1;//用来赋值
int loop = n / 2;//循环次数
int i, j;
int offset = 1;//控制每条边循环的长度
while(loop--)
{
i = stax;
j = stay;
for( j = stay; j < stay + n - offset; j++)//左到右
{
result[stax][j] = count++;
}
for(i = stax;i < stax + n - offset; i++)//上到下
{
result[i][j] = count++;
}
for(; j > stay; j--)//右到左
{
result[i][j] = count++;
}
for(; i > stax; i--)//下到上
{
result[i][j] = count++;
}
//开始位置改变
stax++;
stay++;
offset += 2;//遍历长度
}
if(n % 2 == 1)
result[n/2][n/2] = count;
return result;
}
};