题目
思路
- 首先需要初始化一个二维数组
- 明确需要4条边分开来进行遍历赋值,为了使4条边保持一致,每行/列最后的数字作为下一组的第一个数字(例如:图上3*3矩阵:12-34-54-78,最后给9赋值)
- 图片作者右下角,侵权删
- 明确绕圈遍历次数,不管n为奇数还是偶数,均循环n/2圈,若为奇数,则需要最后单独给[n][n]位置赋值
- 为了简化,只设置一个控制圈数的变量offset
代码
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
//i指行,j指列
//放置的值
int a = 1;
//建立二维数组
vector<vector<int>> nums(n, vector<int>(n, 0));
//控制转圈
int offset = 0;
//不管n是奇数还是偶数,都走n/2圈,相当于在n/2圈内走的是整边
for(int k = 1;k <= n/2;k++)
{
//第一条边
for(int j = offset;j < n-offset-1;j++)
{
nums[offset][j] = a;
a++;
}
//第二条边
for(int i= offset;i < n-offset-1;i++)
{
nums[i][n-offset] = a;
a++;
}
//第三条边
for(int j = n-offset-1;j > 0;j--)
{
nums[n-offset][j] = a;
a++;
}
//第四条边
for(int i = n-offset-1;i>0;i--)
{
nums[i][offset] = a;
a++;
}
offset++;
}
//n是奇数。则最中间的值循环不到,要单独赋值
if(n%2 == 1)
{
int b = n/2;
nums[b][b] = n*n;
}
return nums;
}
};