【LeetCode】566. Reshape the Matrix

本文介绍了一个将原始矩阵重塑为指定尺寸的新矩阵的算法,并通过Python实现。提供了两种解决方案:一种是纯Python方式,另一种利用NumPy库简化操作。文章包含示例输入输出,帮助理解重塑过程。

Python版本:python3.6.2


566. Reshape the Matrix


In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new one with different
size but keep its original data.
You're given a matrix represented by a two-dimensional array, and two positive integers r and c representing the row
number and column number of the wanted reshaped matrix, respectively.
The reshaped matrix need to be filled with all the elements of the original matrix in the same row-traversing order as
they were.
If the 'reshape' operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise,
output the original matrix.
Example 1:
Input:
nums =[[1,2],[3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the
previous list.
Example 2:
Input:
nums =[[1,2],[3,4]]
r = 2, c = 4
Output:
[[1,2],[3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.
Note:
The height and width of the given matrix is in range [1, 100].
The given r and c are all positive.


自己的代码:
class Solution:
    def matrixReshape(self, nums, r, c):
        """
        :type nums: List[List[int]]
        :type r: int
        :type c: int
        :rtype: List[List[int]]
        """
        tmp = []
        res = [[]for i in range(r)]
        count = 0
        if len(nums) * len(nums[0]) == r * c:
            for i in range(len(nums)):
                for j in range(len(nums[0])):
                    tmp.append(nums[i][j])
            for x in range(r):
                y = 0
                while y < c:
                    res[x].append(tmp[count])
                    count += 1
                    y += 1
            return res
        else:
            return nums
检验下:
nums = [[1, 2], [3, 4]]
a = Solution()
print(a.matrixReshape(nums=nums, r=2, c=4))
输出:
"D:\Program files\python3.6.2\python.exe" "D:/sunfl/sunflower/study/LeetCode/566. Reshape the Matrix/566. Reshape the Matrix.py"
[[1, 2], [3, 4]]

进程已结束,退出代码0
速度有点出乎意料,因为是在外面书店写的,有点吵
大神给出了3种解法,列出其中最清晰易懂的一个:

#Solution 1 - NumPy
class Solution:
    def matrixReshape(self, nums, r, c):
        """
        :type nums: List[List[int]]
        :type r: int
        :type c: int
        :rtype: List[List[int]]
        """
        def matrixReshape(self, nums, r, c):
            try:
                return np.reshape(nums, (r, c)).tolist()
            except:
                return nums
一开始我也想到了用numpy,但是一想这么简单不可能,emm.....实事告诉我们,不要怀疑,不要困惑,有工具就用现成的工具,不要重复造轮子。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值