难度中等710
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1 输出:[[1]]
提示:
1 <= n <= 20
通过次数198,515提交次数260,034
题解:模拟一个机器人,按照螺旋线的顺序依次行走矩阵,直到走完,行走方向使用状态机器来描述,只有四个方向。注意边界不要越界。
直接上代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
char dir=0; // dir表示运动方向,0->向右;1->向下;2->向左;3->向上
int x=0,y=0; //初始位置点(0,0),x表示行,y表示列
int count=1; // 初始填充数字
while(count<=n*n)
{
if(dir==0)
{
if(res[x][y]==0 && y<n)
{
res[x][y]=count;
y++;
}
if(y==n || res[x][y]>0)
{
dir=1;
x++;
y--;
}
}
else if(dir==1)
{
if(res[x][y]==0 && x<n)
{
res[x][y]=count;
x++;
}
if(x==n || res[x][y]>0)
{
dir=2;
x--;
y--;
}
}
else if(dir==2)
{
if(res[x][y]==0 && y>-1)
{
res[x][y]=count;
y--;
}
if(y==-1 || res[x][y]>0)
{
dir=3;
x--;
y++;
}
}
else if(dir==3)
{
if(res[x][y]==0 && x>-1)
{
res[x][y]=count;
x--;
}
if(x==-1 || res[x][y]>0)
{
dir=0;
x++;
y++;
}
}
count++;
}
return res;
}
};
执行结果:
通过
显示详情
添加备注
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.5 MB, 在所有 C++ 提交中击败了31.48%的用户
通过测试用例:20 / 20