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基本如出一辙,之前是遍历旋转矩阵,现在是按照遍历结果还原旋转矩阵,逆过程而已。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>result(n,vector<int>(n));
int num=1;
int beginX=0,endX=n-1;
int beginY=0,endY=n-1;
while(true){
for(int j=beginX;j<=endX;j++){
result[beginY][j]=num++;
}
if(++beginY>endY) break;
for(int i=beginY;i<=endY;i++){
result[i][endX]=num++;
}
if(--endX<beginX) break;
for(int j=endX;j>=beginX;j--){
result[endY][j]=num++;
}
if(--endY<beginY) break;
for(int i=endY;i>=beginY;i--){
result[i][beginX]=num++;
}
if(++beginX>endX) break;
}
return result;
}
};