题解 | #螺旋矩阵#
螺旋矩阵
http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31
指针分别从左向右、从上到下、从右到左、从下到上进行遍历。遍历完可能还有剩下的一行或者一列,再遍历完即可。
class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { vector<int> rst; if(matrix.size() == 0) return rst; int top=0, bottom=matrix.size()-1,left=0,right=matrix[0].size()-1; while(top<bottom && left<right) { //从左向右; for(int i=left;i<right;i++) rst.push_back(matrix[top][i]); //从上到下; for(int i=top;i<bottom;i++) rst.push_back(matrix[i][right]); //从右到左; for(int i=right;i>left;i--) rst.push_back(matrix[bottom][i]); //从下到上; for(int i=bottom;i>top;i--) rst.push_back(matrix[i][left]); right--; left++; top++; bottom--; } if(bottom==top) { //最后剩下的一行; for(int i=left;i<=right;i++) rst.push_back(matrix[top][i]); }else if(left==right) { //最后剩下的一列; for(int i=top;i<=bottom;i++) rst.push_back(matrix[i][left]); } return rst; } };