#include <vector> class Solution { public: int m; int n; vector<int> ans; vector<vector<int> > matrix; void myPrint(int x1,int y1,int x2,int y2){ for(int i=y1;i<=y2;i++) ans.push_back(matrix[x1][i]); for(int i=x1+1;i<=x2;i++) ans.push_back(matrix[i][y2]); for(int i=y2-1;i>=y1;i--) ans.push_back(matrix[x2][i]); for(int i=x2-1;i>x1;i--) ans.push_back(matrix[i][y1]); } vector<int> spiralOrder(vector<vector<int> > &matrix) { if(matrix.size()==0) return ans; m=matrix.size(); n=matrix[0].size(); this->matrix=matrix; int x1=0,y1=0,x2=m-1,y2=n-1; while(x2>x1&&y2>y1){ myPrint(x1,y1,x2,y2); x1++; y1++; x2--; y2--; } if(x1==x2) { for(int i=y1;i<=y2;i++) ans.push_back(matrix[x1][i]); } else if(y1==y2) { for(int i=x1;i<=x2;i++) ans.push_back(matrix[i][y1]); } return ans; } };