您的位置:首页 > 其它

给定一整数 n 产生一个 1 到 n*n的螺旋形数组

2017-10-28 10:00 134 查看
本题源自LeetCode

------------------------------------------

例如,
假设n = 3,您应该返回以下矩阵:
[

  [1,2,3]

  [8,9,4]

  [7,6,5]
]

思路:

即从四个方向构造数组

vector<vector<int> > generateMatrix(int n) {
vector<vector<int>> result(n,vector<int>(n,0));
int count = 1;
int rowStart=0;
int rowEnd=n-1;
int colStart=0;
int colEnd=n-1;
while(count<=n*n){
//从左到右
for(int i=colStart;i<=colEnd;i++){
result[rowStart][i]=count++;
}
rowStart++;
//从上到下
for(int i=rowStart;i<=rowEnd;i++){
result[i][colEnd]=count++;
}
colEnd--;
//从右到左
for(int i=colEnd;i>=colStart;i--){

4000
result[rowEnd][i]=count++;
}
rowEnd--;
//从下到上
for(int i=rowEnd;i>=rowStart;i--){
result[i][colStart]=count++;
}
colStart++;
}
return result;
}

延伸 打印螺旋数组

代码:

vector<int> spiralOrder(vector<vector<int> > &matrix) {
int rows=matrix.size();
int cols=0;
if(rows){
cols=matrix[0].size();
}
vector<int> result;
int rowStart=0;
int rowEnd=rows-1;
int colStart=0;
int colEnd=cols-1;
int count=0;
while(count<cols*rows){
//从左到右
for(int i=colStart;i<=colEnd;i++){
result.push_back(matrix[rowStart][i]);
count++;
}
rowStart++;
//从上到下
if(rowStart<=rowEnd){
for(int i=rowStart;i<=rowEnd;i++){
result.push_back(matrix[i][colEnd]);
count++;
}
colEnd--;

//从右到左
if(colEnd>=colStart){
for(int i=colEnd;i>=colStart;i--){
result.push_back(matrix[rowEnd][i]);
count++;
}
rowEnd--;
//从下到上
if(rowEnd>=rowStart){
for(int i=rowEnd;i>=rowStart;i--){
result.push_back(matrix[i][colStart]);
count++;
}
colStart++;
}
}
}
}
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐