【5分钟力扣】867. 转置矩阵

tech2026-02-10  1

文章目录

一、前言二、题目三、解法和思路解法一解法二

一、前言

只要路是对的,就不怕路远。

每天五分钟,看懂一道简单、中等难度的算法题,尽可能将复杂的题讲清楚。

疯狂学习python中,2020-09-04更新

二、题目

给定一个矩阵 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

力扣原题 :https://leetcode-cn.com/problems/transpose-matrix/

三、解法和思路

该题主要考的是二维数组的遍历和转换,难度一般。

步骤:

遍历原数组的行和列。新建数组B替换横纵下标,循环写入

解法一

class Solution: def transpose(self, A: List[List[int]]) -> List[List[int]]: # # 方法一 lis = [[0 for i in range(len(A[0]))] for j in range(len(A))] print(lis) for i in range(len(A)): for j in range(len(A[0])): lis[i][j] = A[j][i] return lis if __name__ == '__main__': obj = Solution() obj.transpose(A)

解法二

from typing import List A = [[1,2,3],[4,5,6],[7,8,9]] class Solution: def transpose(self, A: List[List[int]]) -> List[List[int]]: lis = [] for i in zip(*A): lis.append(list(i)) print(lis) # 一行简写 # print([list(i) for i in zip(*A)]) if __name__ == '__main__': obj = Solution()

知识点:

zip(): 将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

zip( * ): 与 zip 相反,可理解为解压,为zip的逆过程,可用于矩阵的转置

[(1, 4), (2, 5), (3, 6)] >>> zip(a,c) # 元素个数与最短的列表一致 zipped = [(1, 4), (2, 5), (3, 6)] >>> zip(*zipped) # 与 zip 相反,可理解为解压,为zip的逆过程,可用于矩阵的转置 [(1, 2, 3), (4, 5, 6)]
最新回复(0)