📅  最后修改于: 2023-12-03 14:49:27.534000             🧑  作者: Mango
在计算机编程中,经常需要创建矩阵。本文介绍如何从给定数组创建一个 N*M 大小的螺旋矩阵。
螺旋矩阵是指将给定的数字按螺旋的方式排成一个矩阵。例如,给定数字 1-9,螺旋矩阵如下所示:
1 2 3
8 9 4
7 6 5
在创建螺旋矩阵时,我们需要考虑以下几个因素:
以下是一个 Python 代码示例:
def create_spiral_matrix(arr, n, m):
# 初始化矩阵并初始化指针
matrix = [[0] * m for i in range(n)]
row_start, row_end, col_start, col_end = 0, n - 1, 0, m - 1
direction = 'right'
index = 0
# 遍历数组中的元素并填充矩阵
while row_start <= row_end and col_start <= col_end:
if direction == 'right':
for i in range(col_start, col_end + 1):
matrix[row_start][i] = arr[index]
index += 1
row_start += 1
direction = 'down'
elif direction == 'down':
for i in range(row_start, row_end + 1):
matrix[i][col_end] = arr[index]
index += 1
col_end -= 1
direction = 'left'
elif direction == 'left':
for i in range(col_end, col_start - 1, -1):
matrix[row_end][i] = arr[index]
index += 1
row_end -= 1
direction = 'up'
elif direction == 'up':
for i in range(row_end, row_start - 1, -1):
matrix[i][col_start] = arr[index]
index += 1
col_start += 1
direction = 'right'
# 返回创建的螺旋矩阵
return matrix
上述代码中,我们首先创建了一个 N*M 大小的矩阵,并定义了四个指针分别表示矩阵的上下左右四个边界。然后,我们根据指针的位置和所要填充的方向,使用 for 循环遍历数组中的元素,并将其填充到矩阵中。最后,我们返回创建的螺旋矩阵。
该函数的时间复杂度为 O(nm),空间复杂度为 O(nm)。