献丑了,画了个图,如果图看不同,没关系,我们还有注释
class Solution {
public:
vector<vector<int> > generateMatrix(int n)
{
vector<vector<int> >num(n,vector<int>(n,0));
int startX=0,startY=0;
int x=0,y=0;
int count=1;//由于是左闭右开,要减去顶角元素
int mark=1;
int time=n/2;
while(time--)
//转的圈数,这个分奇偶
//如果是奇数最后单独给中心元素赋值
{
x=startX;
y=startX;//为啥这里还要定义嘞?
//你想现在第一圈转完了,是不是要转第二圈的了,现在虽然下面y=startY,是替换了,但你x还在第一圈对角线第一个元素停留这,呢不就不限循环了,所以x这里也要跳到第二圈的对角线元素的位置
for(y=startY;y<n-count;y++)
{
num[x][y]=mark++;//现在x是固定的等于startX也可以写为startX
}
for(x=startX;x<n-count;x++)
{
num[x][y]=mark++;//这里y是固定的,而且由于从上次循环结束y++了,所以直接就是顶角元素
}//结束后x=n,y=n此时都为最大值
for(y;y>startY;y--)//从右往前移
{
num[x][y]=mark++;//同理x是固定的
}
for(x;x>startX;x--)//现在是从下往上移动
{
num[x][y]=mark++;//同理y是固定的
}
startX++;
startY++;
count++;
}
if(n%2!=0)
{
num[startX][startY]=n*n;//填充n为奇数的矩阵中心
}
return num;
}
};
学废了吗?快点去试试吧!戳这里----->题目直达链接