给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
// 第一次循环分成四次排列
class Solution {
public:
vector<vector<int>> generateMatrix(int n) {
vector<vector<int>> ret(n, vector<int>(n, 0)); // 创建二维数组
int x_start = 0, y_start = 0; // 每一次循环起始点坐标
int loop = n / 2; // 循环次数
int mid = n / 2; // 中点位置,只有奇数会有
int offset = 1; // 控制遍历长度
int count = 1; // 赋值
while (loop--) { // loop循环次数,每次结束-1
int i = x_start;
int j = y_start; // 定义每次循环初始位置
// 分为四种循环,每次左闭右开
// 第一次,从左往右
for (j = y_start; j < y_start + n - offset; j++) {
ret[i][j] = count++;
}
// 第二次,从上往下
for (i = x_start; i < x_start + n - offset; i++) {
ret[i][j] = count++;
}
// 第三次,从右往左
for (; j > y_start; j--) {
ret[i][j] = count++;
}
// 第四次,从下往上
for (; i > x_start; i--) {
ret[i][j] = count++;
}
x_start++; // 第二个循环起始位置要加1
y_start++;
offset += 2; // 控制每一次循环的边长
}
if (n % 2) { // 如果是奇数,中间的数字也要赋值
ret[mid][mid] = n * n;
}
return ret;
}
};