LeetCode|867.转置矩阵

LeetCode矩阵转置题解
本文提供了一种解决LeetCode上矩阵转置问题的方法,通过定义一个全为0的矩阵,将原矩阵的行索引与列索引进行交换,实现矩阵的转置。示例包括了不同大小的矩阵转置过程。

LeetCode习题答案汇总

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

分析:

  • 定义一个全为0的矩阵,然后将原矩阵的第i行第j列的元素赋为新矩阵的第j行第i列的值

代码:

class Solution:
    def transpose(self, A: List[List[int]]) -> List[List[int]]:
        row = len(A)
        col = len(A[0])
        matrix = [[0 for i in range(row)] for j in range(col)]
        for i in range(row):
            for j in range(col):
                matrix[j][i] = A[i][j]
        return matrix

结果:
在这里插入图片描述

### 问题描述 LeetCode867题的题目是“转置矩阵”(Transpose Matrix),任务是将一个 $ m \times n $ 的矩阵转置为 $ n \times m $ 的矩阵转置操作即将原矩阵的行和列互换,例如原矩阵中位于第 $ i $ 行第 $ j $ 列的元素,在转置后的矩阵中变为第 $ j $ 行第 $ i $ 列的元素。 例如,输入矩阵: ``` [[1,2,3], [4,5,6]] ``` 输出应为: ``` [[1,4], [2,5], [3,6]] ``` ### 解法分析与实现 #### 方法一:双循环构造新矩阵 该方法通过两次遍历原矩阵的行列索引,直接构造转置矩阵。时间复杂度为 $ O(m \cdot n) $,空间复杂度也为 $ O(m \cdot n) $,适用于大多数情况。 ```cpp class Solution { public: vector<vector<int>> transpose(vector<vector<int>>& matrix) { int m = matrix.size(); int n = matrix[0].size(); vector<vector<int>> result(n, vector<int>(m)); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { result[j][i] = matrix[i][j]; } } return result; } }; ``` 此解法直观且易于理解,适合处理任意大小的矩阵[^1]。 #### 方法二:原地修改(仅适用于方阵) 当输入矩阵是一个方阵(即 $ m = n $)时,可以使用原地修改的方法减少额外空间的使用。通过交换对角线上的元素即可完成转置操作。 ```cpp class Solution { public: vector<vector<int>> transpose(vector<vector<int>>& matrix) { int n = matrix.size(); for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { swap(matrix[i][j], matrix[j][i]); } } return matrix; } }; ``` 此方法的空间复杂度为 $ O(1) $,但仅适用于行数等于列数的情况[^1]。 ### 时间复杂度与适用场景 - **双循环构造新矩阵**:适用于所有 $ m \times n $ 矩阵,时间复杂度为 $ O(m \cdot n) $,空间复杂度为 $ O(n \cdot m) $。 - **原地修改**:仅适用于方阵,时间复杂度为 $ O(n^2) $,空间复杂度为 $ O(1) $。 ### 相关问题 1. 如何判断一个矩阵是否为方阵? 2. 转置矩阵在图像处理或线性代数中的实际应用有哪些? 3. 原地修改算法在哪些场景下更具优势? 4. 如何高效处理稀疏矩阵转置问题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值