class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> arr;
if(matrix.size()==0)
return arr;
int m=matrix.size();
int n=matrix[0].size();
//m行n列的矩阵
//采用分圈处理法
int x1=0,y1=0,x2=m-1,y2=n-1;
while(x1<=x2&&y1<=y2){
//如果只有一行
if(x1==x2){
for(int i=y1;i<=y2;i++)
arr.push_back(matrix[x1][i]);
}
//如果只有一列
else if(y1==y2){
for(int i=x1;i<=x2;i++)
arr.push_back(matrix[i][y1]);
}
//否则的话螺旋打印
else{
//从左往右
int i=x1,j=y1;
while(j<=y2){
arr.push_back(matrix[i][j]);
j++;
}
//从上往下
i=x1+1;
j=y2;
while(i<=x2){
arr.push_back(matrix[i][j]);
i++;
}
//从右往左
j=y2-1;
i=x2;
while(j>=y1){
arr.push_back(matrix[i][j]);
j--;
}
//从下往上
i=x2-1;
j=y1;
while(i>x1){
arr.push_back(matrix[i][j]);
i--;
}
}
x1++;y1++;
x2--;y2--;
}
return arr;
}
};
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> arr;
if(matrix.size()==0)
return arr;
int m=matrix.size();
int n=matrix[0].size();
//m行n列的矩阵
//采用分圈处理法
int x1=0,y1=0,x2=m-1,y2=n-1;
while(x1<=x2&&y1<=y2){
//如果只有一行
if(x1==x2){
for(int i=y1;i<=y2;i++)
arr.push_back(matrix[x1][i]);
}
//如果只有一列
else if(y1==y2){
for(int i=x1;i<=x2;i++)
arr.push_back(matrix[i][y1]);
}
//否则的话螺旋打印
else{
//从左往右
int i=x1,j=y1;
while(j<=y2){
arr.push_back(matrix[i][j]);
j++;
}
//从上往下
i=x1+1;
j=y2;
while(i<=x2){
arr.push_back(matrix[i][j]);
i++;
}
//从右往左
j=y2-1;
i=x2;
while(j>=y1){
arr.push_back(matrix[i][j]);
j--;
}
//从下往上
i=x2-1;
j=y1;
while(i>x1){
arr.push_back(matrix[i][j]);
i--;
}
}
x1++;y1++;
x2--;y2--;
}
return arr;
}
};