leetcode(力扣) 566. 重塑矩阵 (降维升维法) (numpy法)

题目在这:https://leetcode-cn.com/problems/reshape-the-matrix/

题目分析 :

题目要求实现 MATLAB reshape函数。

题目所给的是二维数组,变成规定要求格式的二维数组。

法一:(降维升维)

可以先将二维数组变成一维数组,然后再变成二维数组。

循环遍历我们得到的一维数组。每次都加入到临时一维数组中,如果临时一维数组中的元素已经达到了题目所要求的数量,则将临时一维数组打包加入到二维数组中。

完整代码

class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
            
        ll_1D =  [mat[i][j] for i in range(len(mat)) for j in range(len(mat[0]))]  # 变成一维数组
        # 这个列表推导式我总写反,其实就是从左往右读,拿mat去第一次for里循环,再拿去第二层里循环,显然第一层的for是外层循环 有几行,里面那个for循环每一行有几个字符,这样就好记了。

       

        if  r * c != len(mat) * len(mat[0]): # 加入违规矩阵判断
            return mat


        temp_1D = [] # 临时一维数组
        res = []

        for i in range(len(ll_1D)):
            temp_1D.append(ll_1D[i])
            if (i+1) %  c == 0:
                res.append(temp_1D)  # 将临时一维数组打包加入二维数组
                temp_1D = []    # 重置当前一维数组
                
        return res

法二:(Numpy法)

Python3里的Numpy库可以很简单的解决这类问题。
核心代码仅一行即可。也就是和MATLAB里相同的reshape函数。

完整代码

class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        if r*c != len(mat) * len(mat[0]):
            return mat
        import numpy as np  
        temp = np.array(mat)  # 变成numpy类型
        res = temp.reshape(r,c) # 重塑
        return res.tolist() # 再变回去list类型 返回
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深度不学习!!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值