版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Miss_yuan/article/details/79160102
描述:
给定一个包含 m x n 个要素的矩阵,(m 行, n 列),按照螺旋顺序,返回该矩阵中的所有要素。
样例:
给定如下矩阵:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
应返回 [1,2,3,6,9,8,7,4,5]
。
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> v;
if(matrix.size()==0)
return v;
if(matrix[0].size()==0)
return v;
int m = matrix[0].size();
int n = matrix.size();
int x = 0;
int y = 0;
while(1){
//向右遍历m个点
for(int i =0; i < m; i++){
v.push_back(matrix[x][y+i]);
}
// 所有行遍历完成,无法继续向下遍历
if(--n ==0)
break;
// 更新向下遍历的初始坐标值
y += (m-1);
x++;
//向下遍历n个点
for(int i =0; i < n; i++){
v.push_back(matrix[x+i][y]);
}
// 所有列遍历完成,无法继续向左遍历
if(--m == 0)
break;
// 更新向左遍历的初始坐标值
x += (n-1);
y--;
//向左遍历m个点
for(int i =0; i < m; i++){
v.push_back(matrix[x][y-i]);
}
// 所有行遍历完成,无法继续向上遍历
if(--n == 0)
break;
// 更新向上遍历的初始坐标值
y -= (m-1);
x--;
//向上遍历n个点
for(int i =0; i < n; i++){
v.push_back(matrix[x-i][y]);
}
// 所有列遍历完成,无法继续向右遍历
if(--m == 0)
break;
// 更新向右遍历的初始坐标值
x -= (n-1);
y++;
}
return v;
}
};