描述
给定m×n个元素的矩阵(m行,n列),以螺旋顺序返回矩阵的所有元素。
样例
样例11
2
3
4
5
6
7输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
样例21
2
3
4
5
6
7输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
思路
四个方向移动, 显然这个算法会浪费更多的内存,第二种方法可以直接锁定位置
代码
1 | class Solution { |
参考代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector <int> v;
int row = matrix.size();
if (row<=0) return v;
int col = matrix[0].size();
if (col<=0) return v;
int r, c;
for (r=0, c=0; r<(row+1)/2 && c<(col+1)/2; r++, c++){
//top
for(int i=c; i<col-c; i++){
v.push_back(matrix[r][i]);
}
//right
for(int i=r+1; i<row-r; i++){
v.push_back(matrix[i][col-c-1]);
}
//bottom
for(int i=col-c-2; row-r-1>r && i>=c; i--){
v.push_back(matrix[row-r-1][i]);
}
//left
for(int i=row-r-2; col-c-1>c && i>r; i--){
v.push_back(matrix[i][c]);
}
}
return v;
}