螺旋矩阵
https://leetcode-cn.com/problems/spiral-matrix-ii/
class Solution {
public:
bool out(int x,int y,int n)
{
if(x>=0&&x<=n-1&&y>=0&&y<=n-1)
{
return false;
}
else
{
return true;
}
}
vector<vector<int>> generateMatrix(int n) {
int x=0,y=0; //坐标
vector<vector<int>> matrix(n,vector<int>(n)); //答案
int d[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; //右下左上
int curNum=1; //当前数字
int nowDirection=0; //当前方向
bool vis[n][n]; //访问数组
memset(vis,0,sizeof(vis));
while(true)
{
matrix[x][y]=curNum++;
vis[x][y]=true;
if(curNum>n*n) break;
int nx=x+d[nowDirection][0],ny=y+d[nowDirection][1]; //下一格
if(out(nx,ny,n)||vis[nx][ny]) //出界或已经访问
{
nowDirection=(nowDirection+1)%4; //转向
x=x+d[nowDirection][0],y=y+d[nowDirection][1];
}
else
{
x=nx;
y=ny;
}
}
return matrix;
}
};
这题局部变量必须初始化,用memset函数将vis数组全变为0,不然vis数组的值是随机的。