LeetCode刷题复盘笔记—867. 转置矩阵

题目:867. 转置矩阵

给你一个二维整数数组 matrix, 返回 matrix 的转置矩阵 。
矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。
在这里插入图片描述示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]
示例 2:
输入:matrix = [[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]

一、开始的错误解法

class Solution {
public:
    vector<vector<int>> transpose(vector<vector<int>>& matrix) {
        int m,n;
        m=matrix.size();
        n=matrix[0].size();
        for(int i=0;i<m;++i){
            for(int j=0;j<n;++j){
                swap(matrix[j][i],matrix[i][j]);
            }
        } 
        return matrix;
    }
};

错误原因:转置两次等于没转置

二、正确解法

C++版本:

class Solution {
public:
    vector<vector<int>> transpose(vector<vector<int>>& matrix) {
        int m,n;
        m=matrix.size();
        n=matrix[0].size();
        vector<vector<int>> res(n,vector<int>(m,0));
        for(int i=0;i<m;++i){
            for(int j=0;j<n;++j){
                res[j][i]=matrix[i][j];
            }
        } 
        return res;
    }
};

Python版本:

class Solution(object):
    def transpose(self, matrix):
        m,n=len(matrix),len(matrix[0])
        res=[[0]*m for _ in range(n)]
        for i in range (m):
            for j in range (n):
                res[j][i]=matrix[i][j]
        return res

Python_Oneline第三方库版本:

class Solution(object):
    def transpose(self, matrix):
        import numpy as np
        # list转成numpy.array 然后调用转置将类型转回list
        return np.array(matrix).T.tolist()

总结

C++

二维vector初始化大小方法
名字为vec,大小为m*n,初始值为0的二维vector。
方法1:直接用初始化方法

 vector<vector<int> > vec(m, vector<int>(n, 0));

方法2:用resize()来控制大小

vector<vector<int> > vec;
    vec.resize(n);//n行
    for (int i = 0; i < n; ++i){
        vec[i].resize(m);//每行为m列
    }

Python

二维数组初始化方法:
名字为matrix,大小为m*n,初始值为0的二维数组。
matrix=[[0]*m for _ in range(n)]


欢迎大家扫码关注本人公众号:编程复盘与思考随笔

(关注后可以免费获得本人在csdn发布的资源源码)

公众号主要记录编程和刷题时的总结复盘笔记和心得!并且分享读书、工作、生活中的一些思考感悟!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Al资料站与复盘笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值