点击打开链接
//蛇形数组
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<cstring>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<limits.h>
#include<assert.h>
#define LL long long
#define inf 0x3f3f3f3f
#define mod 1e9+7
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty()) return {};
int m=matrix.size(),n=matrix[0].size();
int vis[m][n]; //是可以这样申请二维数组的
int num=m*n,tot=0,x=0,y=0;
memset(vis, 0, sizeof(vis));
vector<int>res;
res.push_back(matrix[0][0]);
vis[0][0]=1; tot=1;
while (tot<num) {
while (y+1<n&&!vis[x][y+1]) {
y+=1;
res.push_back(matrix[x][y]);
vis[x][y]=1;
tot++;
}
while (x+1<m&&!vis[x+1][y]) {
x+=1;
res.push_back(matrix[x][y]);
vis[x][y]=1;
tot++;
}
while (y-1>=0&&!vis[x][y-1]) {
y-=1;
res.push_back(matrix[x][y]);
vis[x][y]=1;
tot++;
}
while (x-1>=0&&!vis[x-1][y]) {
x-=1;
res.push_back(matrix[x][y]);
vis[x][y]=1;
tot++;
}
}
return res;
}
};
int main()
{
Solution temple;
vector<vector<int>>num;
vector<int> res;
num.push_back({1,2,3});
num.push_back({4,5,6});
num.push_back({7,8,9});
res=temple.spiralOrder(num);
/* for(int i=0;i<res.size();i++){
cout<<res[i]<<" ";
}
*/
return 0;
}