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 ] ]
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
if(n==0)
return vector<vector<int>>();
int startx=0,starty=0,endx=n-1,endy=n-1;
vector<int> ivec(n);
vector<vector<int>> ovec(n,ivec);
int c=n,head=1;
while(startx<=endx&&starty<=endy){
ovec[startx][starty]=head;
for(int i=starty+1;i<=endy;i++)
ovec[startx][i]=ovec[startx][i-1]+1;
for(int i=startx+1;i<=endx;i++)
ovec[i][endy]=ovec[i-1][endy]+1;
for(int i=endy-1;i>=starty;i--)
ovec[endx][i]=ovec[endx][i+1]+1;
for(int i=endx-1;i>=startx+1;i--)
ovec[i][starty]=ovec[i+1][starty]+1;
head=head+4*c-4;
startx++;
starty++;
endx--;
endy--;
c=c-2;
}
return ovec;
}
};