class Solution{
public:
vector<vector<int>> generateMatrix(int x)
{
vector<vector<int>>res(n,vector<int>(n,0));
/*定义每循环一个圈的起始位置*/
int startx=0;
int starty=0;
/*每个圈循环几次,如果n为3,则Loop=1,只循环了一圈*/
int loop=n/2;
/*定义矩阵中间位置*/
int middle=n/2;
/*矩阵每一个空格*/
int count=1;
/*每循环一圈都需要控制每一条边遍历的长度*/
int offset=1;
int i,j;
while(loop--)
{
i=startx;
j=starty;
//模拟转了一圈
//模拟填充上行从左到右(左闭右开)
for(j=starty;j<starty+n-offset;j++)
{
res[i][j]==count++;
}
//最右列从上到下
for(i=startx;i<startx;i++)
{
res[i][j]=count++;
}
//最下行从右到左
for(;j>starty;j--)
{
res[i][j]=count++;
}
//最左列从下到上
for(;i>startx;i--)
{
res[i][j]=count++;
}
/*第二圈开始的时候,起始位置要加一*/
startx++;
starty++;
offset+=2;
}
//如果n为奇数,需要填充矩阵中间值
if(n%2)
{
res[mid][mid]=count;
}
return res;
}
}
类似二分法,边界条件一定要一致,如左闭右开Or左开右闭,坚持这一不变量
一入循环深似海,从此offer是路人