博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(python版) Leetcode-566. 重塑矩阵
阅读量:4091 次
发布时间:2019-05-25

本文共 1830 字,大约阅读时间需要 6 分钟。

01 题目

在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。

给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

链接:https://leetcode-cn.com/problems/reshape-the-matrix

02 解析

最直接的做法是双层循环 行+列

判断:旧矩阵的行x列(一共多少个数)?= 新矩阵的r x c

是 - 输出原矩阵
否 - 进行赋值

赋值:

双层循环中 新矩阵的每个值 ans[i][j] = num
结束当前层的条件是 这行读完了 j==c


python报错:‘list’ object has no attribute 'shape’

numpy.array可使用 shape。list不能使用shape。可以使用np.array(list A)进行转换。(array转list:array B B.tolist()即可)
a=[[1,2,5],[3,4,6]]l,r = np.array(a).shape ==》(2,3)或len(a)	==》 2len(a[0])	==》3len(a[1])	==》3 	也可以用[1]

03 代码

第一慢:如果用用numpy

class Solution:    def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]:        import numpy as np        return r * c != len(nums) * len(nums[0]) and nums or np.array(nums).reshape((r, c))

第二慢:暴力破解

最直接的做法双层循环 行+列

class Solution:    def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]:        if len(nums) * len(nums[0]) != r * c:            return nums        ans=[[0] * c for _ in range(r)]        i, j = 0, 0        for line in nums:            for num in line:                ans[i][j] = num                j += 1                if j == c:                    j = 0                    i += 1        return ans

其实 是不是看网速?同样的代码有快有慢

在这里插入图片描述
在这里插入图片描述

最快

class Solution:    def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]:        if len(nums) * len(nums[0]) != r * c:            return nums        ans=[[0] * c for _ in range(r)]        i, j = 0, 0        for num in itertools.chain(*nums):            ans[i][j] = num            j += 1            if j == c:                j = 0                i += 1        return ans

在这里插入图片描述

链接:https://leetcode-cn.com/problems/reshape-the-matrix/solution/jin-liang-bu-yong-qu-yu-by-tuotuoli/

转载地址:http://mujii.baihongyu.com/

你可能感兴趣的文章
专业和业余的区别就在于你在基础在基本功打磨练习花的时间
查看>>
通过mavlink实现自主航线的过程笔记
查看>>
Ardupilot飞控Mavlink代码学习
查看>>
这些网站有一些嵌入式面试题合集
查看>>
我觉得刷题是有必要的,不然小心实际被问的时候懵逼,我觉得你需要刷个50份面试题。跟考研数学疯狂刷卷子一样!
查看>>
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
现在来看,做个普罗米修斯的docker镜像对我而言并不难,对PX4仿真环境配置也熟悉了。
查看>>
删除docker容器和镜像的命令
查看>>
gazebo似乎就是在装ROS的时候一起装了,装ROS的时候选择的是ros-melodic-desktop-full的话。
查看>>
React + TypeScript 实现泛型组件
查看>>
TypeScript 完全手册
查看>>
React Native之原理浅析
查看>>
Git操作清单
查看>>
基础算法
查看>>
前端面试
查看>>
React 和 ReactNative 的渲染机制/ ReactNative 与原生之间的通信 / 如何自定义封装原生组件/RN中的多线程
查看>>
JavaScript实现DOM树的深度优先遍历和广度优先遍历
查看>>
webpack4 中的 React 全家桶配置指南,实战!
查看>>
react 设置代理(proxy) 实现跨域请求
查看>>
通过试题理解JavaScript
查看>>