Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
Given the following matrix:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
思路:从最外圈遍历到最内圈
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
int m = matrix.size(); //行
if (!m) return res; //空的情况
int n = matrix[0].size(); //列
int lim = (min(m,n)+ 1) / 2; <span style="white-space:pre"> </span>//层数
for (int level = 0; level < lim; level++){
for (int j = level; j <= n - level - 1; j++) //遍历up边
res.push_back(matrix[level][j]);
if (level == lim - 1 && m-level*2 == 1) //最后一行为奇数行
break;
for (int j = level + 1; j < m - level - 1; j++) //遍历right边
res.push_back(matrix[j][n - 1 - level]);
for (int j = n - level - 1; j >= level; j--) //遍历down边
res.push_back(matrix[m - 1 - level][j]);
if (level == lim - 1 && n - level * 2 == 1) //最后一列为奇数列
break;
for (int j = m - level - 2; j>level; j--) //遍历left边
res.push_back(matrix[j][level]);
}
return res;
}
};