//顺时针 class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if(matrix.empty()) return res; int left=0,right=matrix[0].size()-1; int up=0,down=matrix.size()-1; while(true) { //左-》右 for(int i=left;i<=right;i++) res.push_back(matrix[up][i]); if(++up>down) break;//重新设定边界条件 //上-》下 for(int i=up;i<=down;i++) res.push_back(matrix[i][right]); if(--right<left) break; //右-》左 for(int i=right;i>=left;i--) res.push_back(matrix[down][i]); if(--down<up) break; //下-》上 for(int i=down;i>=up;i--) res.push_back(matrix[i][left]); if(++left>right) break; } return res; } }; //逆时针 class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if(matrix.empty()) return res; int left=0,right=matrix[0].size()-1; int up=0,down=matrix.size()-1; while(true) { //上-》下 for(int i=up;i<=down;i++) res.push_back(matrix[i][left]); if(++left>right) break; //左-》右 for(int i=left;i<=right;i++) res.push_back(matrix[down][i]); if(--down<up) break;//重新设定边界条件 //下-》上 for(int i=down;i>=up;i--) res.push_back(matrix[i][right]); if(--right<up) break; //右-》左 for(int i=right;i>=left;i--) res.push_back(matrix[up][i]); if(++up>down) break; } return res; } }; //蛇形 class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if(matrix.empty()) return res; int left=0,right=matrix[0].size()-1; int up=0,down=matrix.size()-1; while(true) { //左-》右 for(int i=left;i<=right;i++) res.push_back(matrix[up][i]); if(++up>down) break; // for(int i=right;i>=left;i--) res.push_back(matrix[up][i]); if(++up>down) break; } return res; } };
原文:https://www.cnblogs.com/Sunshineboy1/p/13618732.html