📅  最后修改于: 2023-12-03 15:28:48.006000             🧑  作者: Mango
编写程序,生成一张 n*n 的方阵,方阵的元素为从 1 到 n^2 按顺序递增的整数,方阵从左上角元素开始,按照右、下、左、上的方向循环填写元素。
一个整数 n,表示方阵的大小。
一个 n*n 的方阵。
def generate_matrix(n: int) -> List[List[int]]:
matrix = [[0] * n for _ in range(n)]
num = 1
top, bottom, left, right = 0, n - 1, 0, n - 1
while top <= bottom and left <= right:
for i in range(left, right + 1):
matrix[top][i] = num
num += 1
top += 1
for i in range(top, bottom + 1):
matrix[i][right] = num
num += 1
right -= 1
if top <= bottom:
for i in range(right, left - 1, -1):
matrix[bottom][i] = num
num += 1
bottom -= 1
if left <= right:
for i in range(bottom, top - 1, -1):
matrix[i][left] = num
num += 1
left += 1
return matrix
n = int(input().strip())
matrix = generate_matrix(n)
for row in matrix:
print(*row)
本题使用了一种类似于“螺旋填图”的方式生成矩阵,具体来说,我们定义了 top、bottom、left、right 四个变量,初始值都为 0 或 n-1,分别表示当前填写区域上下左右的边界。接着我们沿着右、下、左、上的顺序逐个填入矩阵的元素,直到填写完整个矩阵为止。
具体来说,我们首先从左到右填写 top 行,接着从上到下填写 right 列,再从右到左填写 bottom 行,最后从下到上填写 left 列。每次填完一行或一列之后,我们将对应的边界向内收缩一个位置,继续进行填写。填写完整个矩阵之后,我们返回最终的矩阵即可。
时间复杂度:$O(n^2)$