Medium!
题目描述:
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
解题思路:
此题跟之前那道 Spiral Matrix 螺旋矩阵 本质上没什么区别,就相当于个类似逆运算的过程,这道题是要按螺旋的顺序来填数,由于给定矩形是个正方形,我们计算环数时用n / 2来计算,若n为奇数时,此时最中间的那个点没有被算在环数里,所以最后需要单独赋值,下标转换问题是难点,可以参考之前 Spiral Matrix 螺旋矩阵 的讲解来转换下标。
vector<vector<int>>generateMatrix(int n)
{
vector<vector<int>> res(n,vector<int>(n,1));
int total = n*n;
int num = 1;
int rowBegin = 0;
int rowEnd = n-1;
int colBegin = 0;
int colEnd = n-1;
while(num<=total)
{
for(int i=colBegin;i<colEnd;i++)
res[rowBegin][i]=num++;
rowBegin++;
for(int i=rowBegin;i<=rowEnd;i++)
res[i][colEnd] = num++;
colEnd--;
for(int i=colEnd;i>=colBegin;i++)
res[rowEnd][i] = num++;
rowEnd--;
for(int i=rowEnd;i>=rowBegin;i--)
res[i][colBegin]=num++;
colBegin++;
}
return res;
}