题目链接
题目内容
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
解题思路
与https://blog.csdn.net/weixin_38554391/article/details/110913226的解题思路类似。
代码
class Solution {
private:
static constexpr int directions[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<bool>> visited(n, vector<bool>(n));
vector<vector<int>> matrix(n, vector<int>(n));
int row = 0, column = 0;
int total = n * n;
int directionIndex = 0;
vector<int> order(total);
for (int i = 1; i <= total; i++)
{
matrix[row][column] = i;
visited[row][column] = true;
int nextRow = row + directions[directionIndex][0], nextColumn = column + directions[directionIndex][1];
if (nextRow < 0 || nextRow >= n || nextColumn < 0 || nextColumn >= n || visited[nextRow][nextColumn]) {
directionIndex = (directionIndex + 1) % 4;
}
row += directions[directionIndex][0];
column += directions[directionIndex][1];
}
return matrix;
}
};