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

    示例 1:
    输入:n = 3
    输出:[[1,2,3],[8,9,4],[7,6,5]]

    示例 2:
    输入:n = 1
    输出:[[1]]

    提示:
    1 <= n <= 20

    1. class Solution:
    2. def generateMatrix(self, n: int) -> List[List[int]]:
    3. matrix = [[1] * n for _ in range(n)]
    4. flag = [[False] * n for _ in range(n)]
    5. value = 1
    6. x, y = 0, 0
    7. while True:
    8. while flag[x][y] is False: # 向右打印
    9. matrix[x][y] = value
    10. if value == n ** 2:
    11. return(matrix)
    12. value += 1
    13. flag[x][y] = True
    14. if y == n - 1:
    15. x += 1
    16. break
    17. else:
    18. if flag[x][y + 1] is False:
    19. y += 1
    20. elif flag[x + 1][y] is False:
    21. x += 1
    22. break
    23. else:
    24. break
    25. while flag[x][y] is False: # 向下打印
    26. matrix[x][y] = value
    27. if value == n ** 2:
    28. return(matrix)
    29. value += 1
    30. flag[x][y] = True
    31. if x == n - 1:
    32. y -= 1
    33. break
    34. else:
    35. if flag[x + 1][y] is False:
    36. x += 1
    37. elif flag[x][y - 1] is False:
    38. y -= 1
    39. break
    40. else:
    41. break
    42. while flag[x][y] is False: # 向左打印
    43. matrix[x][y] = value
    44. if value == n ** 2:
    45. return(matrix)
    46. value += 1
    47. flag[x][y] = True
    48. if y == 0:
    49. x -= 1
    50. break
    51. else:
    52. if flag[x][y - 1] is False:
    53. y -= 1
    54. elif flag[x - 1][y] is False:
    55. x -= 1
    56. break
    57. else:
    58. break
    59. while flag[x][y] is False: # 向上打印
    60. matrix[x][y] = value
    61. if value == n ** 2:
    62. return(matrix)
    63. value += 1
    64. flag[x][y] = True
    65. if x == 0:
    66. y += 1
    67. break
    68. else:
    69. if flag[x - 1][y] is False:
    70. x -= 1
    71. elif flag[x][y + 1] is False:
    72. y += 1
    73. break
    74. else:
    75. break
    1. class Solution:
    2. def generateMatrix(self, n: int) -> List[List[int]]:
    3. l, r, t, b = 0, n - 1, 0, n - 1
    4. mat = [[0 for _ in range(n)] for _ in range(n)]
    5. num, tar = 1, n * n
    6. while num <= tar:
    7. for i in range(l, r + 1): # left to right
    8. mat[t][i] = num
    9. num += 1
    10. t += 1
    11. for i in range(t, b + 1): # top to bottom
    12. mat[i][r] = num
    13. num += 1
    14. r -= 1
    15. for i in range(r, l - 1, -1): # right to left
    16. mat[b][i] = num
    17. num += 1
    18. b -= 1
    19. for i in range(b, t - 1, -1): # bottom to top
    20. mat[i][l] = num
    21. num += 1
    22. l += 1
    23. return mat