leetcode 867 Transpose Matrix
题目地址:https://leetcode.com/problems/transpose-matrix/description/
题目描述
给定一个矩阵 A, 返回 A 的转置矩阵。
矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
示例 1:
输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]
示例 2:
输入:[[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]
提示:
1 <= A.length <= 1000
1 <= A[0].length <= 1000
解题思路
对于矩阵$A = \begin{bmatrix}
1 & 2 & 3 \
4 & 5 & 6 \
7 & 8 & 9 \
\end{bmatrix}$,它的转置矩阵是$transA = \begin{bmatrix}
1 & 4 & 7 \
2 & 5 & 8 \
3 & 6 & 9 \
\end{bmatrix}$ 。
转置矩阵transA的行向量就是矩阵A的列向量。并且,转置矩transA的行数等于矩阵A的列数
通过代码
1 | class Solution: |
一行代码
刚开始做的时候没有想到使用zip()函数,看到别人用才想到,直接用zip就可以实现了,代码如下:
1 | class Solution2: |
对这一行代码的过程分析
对于这样的一个矩阵: $transA = \begin{bmatrix}
1 & 4 & 7 \
2 & 5 & 8 \
3 & 6 & 9 \
\end{bmatrix}$ 。 令x = [1,4,7], y = [2,5,8], z = [3,6,9]
使用zip函数如下:
1 | x = [1,4,7] |
xyz是题中给的输入矩阵A,那么我们需要对A使用zip(*A)进行一次逆向操作,将其还原成x,y,z,即可完成矩阵转置。
1 | x = [1,4,7] |
关于为什么使用map方法:
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,举例来说:
1 | A=[[1, 2, 3], [4, 5, 6], [7, 8, 9]] |
返回的列表中是元组,因此,需要用map方法将每个元组转换为列表。
zip 方法在 Python 2 和 Python 3 中的不同:
在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。