给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路:模拟,核心是最边的元素位置在当前循环不赋值,留给下一轮子循环,使得循环有规律。 n*n的矩阵,总共大循环有n/2次,其中n为奇数那么中心的做特判,单独赋值
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int> > res(n,vector<int>(n,0));
int sx=0;
int sy=0;
int loop=n/2;
//让出来一个位置,使得有规律
int offset=1;
int count=1;
int mid=n/2;
while(loop--)
{
int i=sx;
int j=sy;
//第一行填充
for(j;j<n-offset;j++)
{
res[i][j]=count++;
}
for(i;i<n-offset;i++)
{
res[i][j]=count++;
}
for(j;j>sx;j--)
{
res[i][j]=count++;
}
for(i;i>sy;i--)
{
res[i][j]=count++;
}
offset++;
sx++;
sy++;
}
if(n%2==1)
{
res[mid][mid]=count;
}
return res;
}
};