本文共 1830 字,大约阅读时间需要 6 分钟。
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。 如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。链接:https://leetcode-cn.com/problems/reshape-the-matrix
最直接的做法是双层循环 行+列
判断:旧矩阵的行x列(一共多少个数)?= 新矩阵的r x c
是 - 输出原矩阵 否 - 进行赋值赋值:
双层循环中 新矩阵的每个值 ans[i][j] = num 结束当前层的条件是 这行读完了 j==cpython报错:‘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]
第一慢:如果用用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/