在生成螺旋矩阵时,需要注意边界条件和循环终止条件。具体来说,当矩阵的边长为奇数时,中心元素的值应该为平方数的最大值。当矩阵的边长为偶数时,中心元素的值为平方数的最大值与其上方的元素值之和。下面是修复代码示例:
def generateMatrix(n):
"""
:type n: int
:rtype: List[List[int]]
"""
matrix = [[0] * n for _ in range(n)]
left, top, right, bottom = 0, 0, n - 1, n - 1
num = 1
while left <= right and top <= bottom:
# 从左到右
for i in range(left, right + 1):
matrix[top][i] = num
num += 1
# 从上到下
for i in range(top + 1, bottom + 1):
matrix[i][right] = num
num += 1
# 从右到左
for i in range(right - 1, left - 1, -1):
matrix[bottom][i] = num
num += 1
# 从下到上
for i in range(bottom - 1, top, -1):
matrix[i][left] = num
num += 1
left += 1
top += 1
right -= 1
bottom -= 1
# 处理边长为偶数的情况
if n % 2 == 0:
mid = n // 2
matrix[mid][mid - 1] = n ** 2 - 1
matrix[mid][mid] = n ** 2
# 处理边长为奇数的情况
else: