题目
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
和Spiral Matrix相似,不过这次是生成相应的矩阵,且矩阵为方阵。
可以用递归的思想,每次生成外边的一圈,缩小规模,修改开始序号。
也可以使用原Spiral Matrix采用的方法,依次填各个元素。
代码:
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
vector<vector<int>> matrix(n,vector<int>(n,0));
int x1=0,y1=0,x2=0,y2=n-1,x3=n-1,y3=n-1,x4=n-1,y4=0; //顺时针一圈4个角的位置
int i,num=1;
while(1)
{
if(y1<=y2) //y递增
{
for(i=y1;i<=y2;i++)
matrix[x1][i]=num++;
x1++;
y1++;
x2++;
}
else break;
if(x2<=x3) //x递增
{
for(i=x2;i<=x3;i++)
matrix[i][y2]=num++;
y2--;
y3--;
}
else break;
if(y3>=y4) //y递减
{
for(i=y3;i>=y4;i--)
matrix[x3][i]=num++;
x3--;
x4--;
}
else break;
if(x4>=x1) //x递减
{
for(i=x4;i>=x1;i--)
matrix[i][y4]=num++;
y4++;
}
else break;
}
return matrix;
}
};