题目:
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。
样例:
给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
应返回 [1,2,3,6,9,8,7,4,5]。
思路:
- 如果只有一行或者一列,只要依次输出即可。
- 如果多行多列,就依次向右,向下,向左,向上操作,从大圈到小圈;每转完一圈,行列各减少2;起点行列各加1。
参考答案:
class Solution {
public:
/*
* @param matrix: a matrix of m x n elements
* @return: an integer list
*/
vector<int> spiralOrder(vector<vector<int>> &matrix) {
// write your code here
vector<int> res;
if(matrix.empty()) return res;
int m = matrix.size();
int n = matrix[0].size();
int row=0;
int col=0;
while(m>0 && n>0)
{
if(m==1){//只有一行的情况
for(int i=0; i<n; i++){
res.push_back(matrix[row][col++]);
}
break;
}
if(n==1){//只有一列的情况
for(int i=0; i<m; i++){
res.push_back(matrix[row++][col]);
}
break;
}
for(int i=0; i<n-1; i++){//向右遍历注意是n-1
res.push_back(matrix[row][col++]);
}
for(int i=0; i<m-1; i++){//向下遍历
res.push_back(matrix[row++][col]);
}
for(int i=0; i<n-1; i++){//向左遍历
res.push_back(matrix[row][col--]);
}
for(int i=0; i<m-1; i++){//向上遍历
res.push_back(matrix[row--][col]);
}
row++;
col++;
m -= 2;
n -= 2;
}
return res;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。