给你一个正整数 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; } };