class Solution {
vector<int> v;
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if (matrix.size() == 0) return v;
spiralOrder(matrix, 0, matrix.size() - 1, 0, matrix[0].size() - 1);
return v;
}
void spiralOrder(vector<vector<int>>& matrix, int r1, int r2, int c1, int c2) {
if (r1 > r2 || c1 > c2) return;
if (r1 == r2) {
for (int i = c1; i <= c2; i++) v.push_back(matrix[r1][i]);
} else if (c1 == c2) {
for (int i = r1; i <= r2; i++) v.push_back(matrix[i][c1]);
} else {
for (int i = c1; i <= c2; i++) v.push_back(matrix[r1][i]);
for (int i = r1 + 1; i <= r2; i++) v.push_back(matrix[i][c2]);
for (int i = c2 - 1; i >= c1; i--) v.push_back(matrix[r2][i]);
for (int i = r2 - 1; i > r1; i--) v.push_back(matrix[i][c1]);
}
spiralOrder(matrix, r1+1, r2-1, c1+1, c2-1);
}
};
思路
分治算法、递归;
如果矩阵为空,返回空数组;否则调用自己定义的函数;
递归终止条件,对r1>=r2,c1>=c2进行判断处理,如果r1 < r2且c1 < c2,外层遍历进入数组,内层类似使用递归