给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
    示例 1:
    输入:n = 3
    输出:[[1,2,3],[8,9,4],[7,6,5]]
    示例 2:

    输入:n = 1
    输出:[[1]]

    1. /**
    2. * @param {number} n
    3. * @return {number[][]}
    4. */
    5. var generateMatrix = function (n) {
    6. let startX = startY = 0; // 起始位置
    7. let loop = Math.floor(n / 2); // 旋转圈数
    8. let mid = Math.floor(n / 2); // 中间位置
    9. let offset = 1; // 控制每一层填充元素个数
    10. let count = 1; // 更新填充数字
    11. let res = new Array(n).fill(0).map(() => new Array(n).fill(0));
    12. while (loop--) {
    13. let row = startX, col = startY;
    14. // 上行从左到右(左闭右开)
    15. for (; col < startY + n - offset; col++) {
    16. res[row][col] = count++;
    17. }
    18. // 右列从上到下(左闭右开)
    19. for (; row < startX + n - offset; row++) {
    20. res[row][col] = count++;
    21. }
    22. // 下行从右到左(左闭右开)
    23. for (; col > startY; col--) {
    24. res[row][col] = count++;
    25. }
    26. // 左列做下到上(左闭右开)
    27. for (; row > startX; row--) {
    28. res[row][col] = count++;
    29. }
    30. // 更新起始位置
    31. startX++;
    32. startY++;
    33. // 更新offset
    34. offset += 2;
    35. }
    36. // 如果n为奇数的话,需要单独给矩阵最中间的位置赋值
    37. if (n % 2 === 1) {
    38. res[mid][mid] = count;
    39. }
    40. return res;
    41. };

    image.png