class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix int整型vector<vector<>> * @return int整型vector */ vector<int> spiralOrder(vector<vector<int> >& matrix) { // write code here vector<int> ans; if(matrix.empty()) return ans; int row = matrix.size(); int col = matrix[0].size(); int flag = 0; // 矩阵的上下左右边界; int height=0, low=row-1, left=0, right=col-1; for(int k=0; k<row*col;) { // 0往右遍历 if(flag%4==0) { int t = left; while(t<=right && k<row*col) { ans.emplace_back(matrix[height][t++]); ++k; } // 上边界遍历完了,下移 ++height; // 改变遍历方向 ++flag; } // 1往下遍历 else if(flag%4==1) { int t = height; while(t<=low && k<row*col) { ans.emplace_back(matrix[t++][right]); ++k; } // 右边界遍历完了,左移 --right; // 改变遍历方向 ++flag; } // 2往左遍历 else if(flag%4==2) { int t = right; while(t>=left && k<row*col) { ans.emplace_back(matrix[low][t--]); ++k; } // 下边界遍历完了,上移 --low; // 改变遍历方向 ++flag; } // 3往上遍历 else if(flag%4==3) { int t = low; while(t>=height && k<row*col) { ans.emplace_back(matrix[t--][left]); ++k; } // 左边界遍历完了,右移 ++left; // 改变遍历方向 ++flag; } } return ans; } };