题目描述
给你一个正整数 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
解答
cpp
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
// 生成顺序:每一轮右下左上
vector<vector<int>> res(n, vector<int>(n, 0));
int left = 0, right = n - 1, up = 0, down = n - 1; // 四方向边界
int i = 0, j = 0; // 起始位置
for(int i = 1; i <= n*n;)
{
// 右
for(int j = left; j <= right; ++j)
{
res[up][j] = i++;
}
up = up + 1; // 上边界下移一个单位
// 下
for(int j = up; j <= down; ++j)
{
res[j][right] = i++;
}
right = right - 1; // 右边界左移一个单位
// 左
for(int j = right; j >= left; --j)
{
res[down][j] = i++;
}
down = down - 1;
// 下
for(int j = down; j >= up; --j)
{
res[j][left] = i++;
}
left = left + 1;
}
return res;
}
};