Spiral Matrix(C++螺旋矩阵)
(1) 设置访问数组+转向
class Solution {
public:
vector<vector<int>> d={
{0,1},{1,0},{0,-1},{-1,0}};
vector<int> v;
int ms=0,ns=0;
public:
void helper(vector<vector<int>> &vis,vector<vector<int> > &matrix,int x,int y,int i) {
vis[x][y]=1;
v.push_back(matrix[x][y]);
if(v.size()==ms*ns) return;
int x1=x+d[i][0];
int y1=y+d[i][1];
if(0<=x1 && x1<ms && 0<=y1 && y1<ns && vis[x1][y1]==0) {
helper(vis,matrix,x1,y1,i);
} else {
i=(i+1)%4;
x1=x+d[i][0];
y1=y+d[i][1];
helper(vis,matrix,x1,y1,i);
}
return;
}
vector<int> spiralOrder(vector<vector<int> > &matrix) {
int m=matrix.size(),n=matrix[0].size();
if(m==0) return {};
ms=m,ns=n;
vector<vector<int>> vis(m,vector<int>(n,0));
helper(vis,matrix,0,0,0);
return v;
}
};
还没有评论,来说两句吧...