leetcode--Transpose Matrix

题目来源–Leetcode[1]
求一个列表矩阵的转置。

没啥说的,直接上思路及其代码:
解法(一):
直接用转置的定义,矩阵转置的定义为行变列,列变行,即将矩阵中的元素行列颠倒,基于这个思路,将列表矩阵中的每一个小列表看成是行,列表中元素对应的竖线的元素是列,这样转置就是找到小列表的元素(在外循环)及其对应列的元素(内循环)做一个append,再将append之后的元素做一个append即可。上代码:

class Solution:
    def transpose(self, A):
        """
        :type A: List[List[int]]
        :rtype: List[List[int]]
        """
        b = list()
        c = list()
        for j in range(0,len(A[0])):
            for i in range(0,len(A)):
                c.append(A[i][j])
            b.append(c)
            c = list()
        return b

解法2思路:
既然是矩阵,直接矩阵.T就可以了哇,但这是矩阵套矩阵哇,怕啥,转过来就好了。在Leetcode上无法完成提交,本地做了test。Leetcode报:

Line 63: Exception: Type <class 'numpy.matrixlib.defmatrix.matrix'>: Not implemented

这个稍后再看看咋回事,,,,本地做了个test如下:

def transpose(A):
    return matrix(A).T

if __name__ == '__main__':
    from numpy import *
    A=[]
    A = [[1]]
    A = [[1,2]]
    A = [[1],[2]]
    A = [[1,2,3],[4,5,6],[7,8,9]]
    A = [[1,2,3],[4,5,6]]
    print(transpose(A))
有一个大神[2]一行代码写好了,是一个元组组成列表:
return  list(zip(*a))

zip 干嘛的呢?简单地来说,就是对应元素的竖线元素组成一个元组

Ref:
[1] https://leetcode.com/problems/transpose-matrix/description/
[2] https://leetcode.com/problems/transpose-matrix/discuss/146767/Python-1-Liner

猜你喜欢

转载自blog.csdn.net/woai8339/article/details/82081983