给定一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:

输入: 3
输出:[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路:
同样是每条边的访问顺序恒定, 可以提前初始化 n*n 的方阵,然后收缩各边按逐个填入数字。
AC代码:
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
// 初始化全0的n阶方阵
vector<vector<int>> matrix(n, vector<int>(n, 0));
int num = 1;
int target = n * n;
int top = 0, bottom = n - 1;
int left = 0, right = n - 1;
while (num <= target) {
// 上边:从左到右
for (int j = left; j <= right && num <= target; j++) {
matrix[top][j] = num++;
}
top++;
// 右边:从上到下
for (int i = top; i <= bottom && num <= target; i++) {
matrix[i][right] = num++;
}
right--;
// 下边:从右到左
for (int j = right; j >= left && num <= target; j--) {
matrix[bottom][j] = num++;
}
bottom--;
// 左边:从下到上
for (int i = bottom; i >= top && num <= target; i--) {
matrix[i][left] = num++;
}
left++;
}
return matrix;
}
};Code language: C++ (cpp)