给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
c++代码
class Solution { public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; int i,j,loop_lie,loop_hang,startx,starty,offset,m,n; startx=starty=0; offset=1; m=matrix.size(); n=matrix[0].size(); loop_hang=m/2; loop_lie=n/2; while(loop_hang&&loop_lie){ i=startx; j=starty; for(j=starty;j<n-offset;j++) res.push_back(matrix[startx][j]); for(i=startx;i<m-offset;i++) res.push_back(matrix[i][j]); for(j;j>starty;j--) res.push_back(matrix[i][j]); for(i;i>startx;i--) res.push_back(matrix[i][j]); loop_lie--; loop_hang--; offset++; starty++; startx++; } if(m==n&&n%2==1){ res.push_back(matrix[n/2][n/2]); }else if(m!=n&&loop_hang!=0){ if(!(n%2==0&&n/2==starty)) for(i=startx;i<=m-offset;i++) res.push_back(matrix[i][starty]); }else if(m!=n&&loop_lie!=0){ if(!(m%2==0&&m/2==startx)) for(j=starty;j<=n-offset;j++) res.push_back(matrix[startx][j]); } return res; } };