https://oj.leetcode.com/problems/spiral-matrix/
题目没难度,就是循环把每一层的螺旋打印出来即可。需要注意每次螺旋大小缩小2,计算相应的位置并考虑左边界等于右边界的情况。
class Solution {
public:int n,m;int cn,cm;vector <int> tot;vector<vector<int> > matrix;void Print(){int l=(m-cm)/2;int u=(n-cn)/2;int r=m-l-1;int d=n-l-1;if (l==r){for (int i=u;i<=d;i++){tot.push_back(matrix[i][l]);}return;}if (u==d){for (int i=l;i<=r;i++){tot.push_back(matrix[u][i]);}return;}for (int i=l;i<r;i++){tot.push_back(matrix[u][i]);}for (int i=u;i<d;i++){tot.push_back(matrix[i][r]);}for (int i=r;i>l;i--){tot.push_back(matrix[d][i]);}for (int i=d;i>u;i--){tot.push_back(matrix[i][l]);}}vector<int> spiralOrder(vector<vector<int> > &matrix) {this->matrix=matrix;n=matrix.size();if (n==0){return tot;}m=matrix[0].size();if (m==0){return tot;}cn=n;cm=m;while(cn>0 && cm>0){Print();cn-=2;cm-=2;}return tot;}
};