(写给未来遗忘的自己)
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> nums(n,vector<int>(n,0));
int count=1;
int a=n/2;
int circulation=0;
int x=0;
int y=0;
while(circulation<a)
{
for(y;y<n-1-circulation;y++)
{
nums[x][y]=count;
count++;
}
for(x;x<n-1-circulation;x++)
{
nums[x][y]=count;
count++;
}
for(y;y>0+circulation;y--)
{
nums[x][y]=count;
count++;
}
for(x;x>0+circulation;x--)
{
nums[x][y]=count;
count++;
}
x++;
y++;
circulation++;
}
if(n%2==1)
{
nums[a][a]=n*n;
}
return nums;
}
};
思路:1.对于偶数正好可以走完,但是对于奇数会出现中间的一个方框(n^2)没有值的情况,需要单独处理.
2.对于循环封闭的,保证四条线闭合的左右一直相同。一直保持左闭右开的情况,这样每一行的数据就是n-1个。循环一次开始和结束向内走1,开始由x,y控制开端,结束端由circulation控制。