给定一个正整数 n,生成一个包含 1 到 n*n 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路:
模拟顺时针的过程,和上一篇博客思路差不多,代码应该很容易看懂
class Solution {
public:
vector<vector<int>> generateMatrix(int n)
{
if (n == 0)return{ {} };
if (n == 1)return{ {1} };
vector<vector<int>>res(n, vector<int>(n));//生成个n*n的矩阵,每个元素都是0
int count = 1;
res[0].at(0) = count;
int x = 1, y = 0;
count++;
while (count <= n*n)
{
while (x < n&&res[y].at(x) == 0)//向右
{
res[y].at(x) = count;
x++;
count++;
}
x--;
y++;
while (y < n&&res[y].at(x) == 0)//向下
{
res[y].at(x) = count;
y++;
count++;
}
y--;
x--;
while (x >= 0 && res[y].at(x) == 0)//向左
{
res[y].at(x) = count;
x--;
count++;
}
x++;
y--;
while (y >= 0 && res[y].at(x) == 0)//向上
{
res[y].at(x) = count;
y--;
count++;
}
y++;
x++;
}
return res;
}
};