给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
本文参考代码随想录
每画一条边都要坚持左开右闭或者左闭右开原则。
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> res(n, vector<int>(n, 0));
int startx = 0, starty = 0;//每循环一个圈的起始位置
int loop = n / 2;//循环几次
int mid = n / 2;//矩阵中间的位置
int count = 1;//用来给矩阵中每一个空格赋值
int offset = 1;//需要控制每一条边遍历的长度,每次循环右边界收缩一位
int i, j;
while(loop--){
i = startx;
j = starty;
for(j;j < n - offset; j++){
res[i][j] = count++;
}//上边
for(i;i < n - offset; i++){
res[i][j] = count++;
}//右边
for(;j > starty;j--){
res[i][j] = count++;
}//下边
for(;i > startx;i--){
res[i][j] = count++;
}
//下一圈开始时起始位置+1
startx++;
starty++;
offset += 1;
}
if(n % 2){
res[mid][mid] = count;
}
return res;
}
};
时间复杂度:O(n^2)
空间复杂度:O(1)