題目
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==) return vector<vector<int> >(); // 傳回空的數組
vector<vector<int> > ret(n,vector<int>(n,));
int rowBegin=;
int rowEnd=n-;
int colBegin=;
int colEnd=n-;
int num=;
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;
}
};