题目描述
给你一个正整数 n
,生成一个包含 1
到 所有元素,且元素按顺时针顺序螺旋排列的
正方形矩阵
matrix
eg
题解
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> result(n, vector<int>(n, 0));
int startx=0, starty=0;//转圈的初始坐标
int loop=n/2;//一共要转n/2圈
int mid=n/2;//n为奇数时要单独处理
int count=1;//元素计数
int offset=1;//偏移量,每走完一圈+1向内圈收缩
while(loop--)
{
int i=startx,j=starty;
for(j=starty;j<n-offset;j++)
{
result[i][j]=count++;
}
for(i=startx;i<n-offset;i++)
{
result[i][j]=count++;
}
for(;j>=offset;j--)
{
result[i][j]=count++;
}
for(;i>=offset;i--)
{
result[i][j]=count++;
}
startx++;
starty++;//X,Y都++
offset++;
}
if(n%2)//n为奇数时单独处理中间元素
result[mid][mid]=n*n;
return result;
}
};
注意事项
1.类似于二分查找,要尤其注意边界,本题的题解采用的是左闭右开的边界
2.注意对n为奇数时对于中间元素的特殊处理