题目
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 ]
]
算法
复杂度:O(nm)
class Solution {
public:
vector<vector<int> > generateMatrix(int n) {
if(n==0) return vector<vector<int> >(); // 返回空的数组
vector<vector<int> > ret(n,vector<int>(n,0));
int rowBegin=0;
int rowEnd=n-1;
int colBegin=0;
int colEnd=n-1;
int num=1;
while(rowBegin<=rowEnd && colBegin <= colEnd){
if(num<=n*n) //判断是否达到最大值
{
//向右遍历添加
for(int j=colBegin;j<=colEnd;j++){
ret[rowBegin][j]=num;
num++;
}
}
rowBegin++;
if(num<=n*n) //判断是否达到最大值
{
//向下遍历添加
for(int i=rowBegin;i<=rowEnd;i++){
ret[i][colEnd]=num;
num++;
}
}
colEnd--;
if(num<=n*n) //判断是否达到最大值
{
//向左遍历添加
for(int j=colEnd;j>=colBegin;j--){
ret[rowEnd][j]=num;
num++;
}
}
rowEnd--;
if(num<=n*n) //判断是否达到最大值
{
//向上遍历添加
for(int i=rowEnd;i>=rowBegin;i--){
ret[i][colBegin]=num;
num++;
}
}
colBegin++;
}
return ret;
}
};