我尝试编写一个就地转置功能只是为了练习。谁能告诉我这个算法的时间和空间复杂度是什么?
from copy import *
def transpose(matrix):
reference=deepcopy(matrix)
col_num=len(reference[0])
row_num=len(reference)
matrix.clear()
new=[list(map(lambda x: x[i],reference)) for i in range(col_num)]
for i in new:
matrix.append(new)
return matrix
x=[[ 1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
y=transpose(x)
编辑:使我的就地转置代码更简洁
答案 0 :(得分:1)
对于第二个循环,请更改为以下内容。 在你的代码中,你将进入一个无限循环。
for row in matrix:
while len(row)!=row_num:
if len(row)<row_num:
row.append(0)
else:
row.pop()
答案 1 :(得分:0)
如果它是一个NxN的方阵,则比:
def transpose(matrix):
# Transpose O(N*N)
size = len(matrix)
for i in range(size):
for j in range(i+1, size):
matrix[j][i],matrix[i][j] = matrix[i][j],matrix[j][i]