LeetCode-Spiral Matrix-螺旋矩阵
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;
}
};
浙公网安备 33010602011771号