列表

详情


566. 重塑矩阵

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

给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 rc ,分别表示想要的重构的矩阵的行数和列数。

重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。

如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

 

示例 1:

输入:mat = [[1,2],[3,4]], r = 1, c = 4
输出:[[1,2,3,4]]

示例 2:

输入:mat = [[1,2],[3,4]], r = 2, c = 4
输出:[[1,2],[3,4]]

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) { } };

golang 解法, 执行用时: 12 ms, 内存消耗: 6.2 MB, 提交时间: 2021-07-16 10:25:51

func matrixReshape(mat [][]int, r int, c int) [][]int {
    r0, c0 := len(mat), len(mat[0])
    if r0 * c0 != r * c {
        return mat
    }
    ans := make([][]int, r)
    for i := 0; i < r; i++ {
        ans[i] = make([]int, c)
    }
    for i := 0; i < r*c; i++ {
        ans[i/c][i%c] = mat[i/c0][i%c0]
    }
    return ans
}

python3 解法, 执行用时: 116 ms, 内存消耗: N/A, 提交时间: 2018-08-25 11:50:11

class Solution:
    def matrixReshape(self, nums, r, c):
        """
        :type nums: List[List[int]]
        :type r: int
        :type c: int
        :rtype: List[List[int]]
        """
        from functools import reduce
        r1 = len(nums[0])
        c1 = len(nums)
        if r1 * c1 != r * c:
            return nums
        nums_2 = list(reduce(lambda x,y:x+y, nums))
        nums_3 = []
        for i in range(0, r):
            nums_3.append(nums_2[i*c:(i+1)*c])
        return nums_3
        

上一题