1、描述
59给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
题目链接
姊妹篇
2、关键字
矩阵复原
3、思路
模拟
4、notes
5、复杂度
时间O(N平方)
空间O(N平方)
6、code
#define right 1
#define down 2
#define left 3
#define up 0
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>>res(n,vector<int>(n,0));
vector<vector<int>>flag(n,vector<int>(n,0)); // 标记有没有访问过
int N=n*n; // 结果个数
//vector<int>res;
int direct=1;
int i=0,j=0;
int num=1;
while(N){
if(direct==right && flag[i][j]==0){ // 向右前行
res[i][j]=num;
N--;
flag[i][j]=1;
j++;
if(j==n || flag[i][j]==1){ // 向下变向
direct=down;
i++;
j--;
}
num++;
}else
if(direct==down && flag[i][j]==0){ // 向下前行
res[i][j]=num;
N--;
flag[i][j]=1;
i++;
if(i==n || flag[i][j]==1){ // 向左变向
direct=left;
j--;
i--;
}
num++;
}else
if(direct==left && flag[i][j]==0){ // 前行
res[i][j]=num;
N--;
flag[i][j]=1;
j--;
if(j==-1 || flag[i][j]==1){ // 变向
direct=up;
i--;
j++;
}
num++;
}else
if(direct==up && flag[i][j]==0){ //前行
res[i][j]=num;
N--;
flag[i][j]=1;
i--;
if(i==-1 || flag[i][j]==1){ // 变向
direct=right;
j++;
i++;
}
num++;
}
}
return res;
}
};