给定一个矩阵 A
, 返回 A
的转置矩阵。
矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例 1:
输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]]
解法一:初始化一个新的矩阵来保存答案。尺寸为 R x C
的矩阵 A
转置后会得到尺寸为 C x R
的矩阵 ans
,对此有 ans[c][r] = A[r][c]
。
class Solution(object):
def transpose(self, A):
R, C = len(A), len(A[0])
ans = [[None] * R for _ in xrange(C)]
for r, row in enumerate(A):
for c, val in enumerate(row):
ans[c][r] = val
return ans
解法二:不需要额外的空间,直接原地进行转置。
注意:1.是c++中的swap()操作,python中没有swap()函数,直接是a,b=b,a进行交换
2.此方法适用于至少是2*2的数值,若是1*2或者2*1的数组则会出错,因为A[i][j],A[j][i]时数组索引越界了。
class Solution:
def transpose(self, A: List[List[int]]) -> List[List[int]]:
for i in range(len(A)):
for j in range(i):
A[i][j],A[j][i]=A[j][i],A[i][j] #swap操作,而不是简单的A[i][j]=A[j][i]
return A