题目描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
思路
用递归做,先输出最外层(顶行右列底行左列),再递归输出内层矩阵,对矩阵宽或高为1时进行特判并返回、
代码
class Solution {
private:
void order(vector<vector<int>>& matrix, vector<int>& res,int x1,int y1,int x2,int y2){
int w=x2-x1+1;
int h=y2-y1+1;
if(w==0||h==0) return;
if(w==1){
for(int i=y1; i<=y2; i++)
res.push_back(matrix[i][x1]);
return;
}
if(h==1){
for(int i=x1; i<=x2; i++)
res.push_back(matrix[y1][i]);
return;
}
for(int i=x1; i<x2; i++)//top
res.push_back(matrix[y1][i]);
for(int i=y1; i<y2; i++)//right
res.push_back(matrix[i][x2]);
for(int i=x2; i>x1; i--)//bottom
res.push_back(matrix[y2][i]);
for(int i=y2; i>y1; i--)//left
res.push_back(matrix[i][x1]);
order(matrix,res,++x1,++y1,--x2,--y2);
}
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> result;
int m=matrix.size();
int n=matrix[0].size();
order(matrix, result,0,0,n-1,m-1);
return result;
}
};