【刷题笔记】566. 重塑矩阵

70 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

题目描述

原题链接 :

566. 重塑矩阵 - 力扣(LeetCode) (leetcode-cn.com)

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

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

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

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

 

示例 1:

image.png

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

示例 2:

image.png

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

提示:

  • m == mat.length
  • n == mat[i].length
  • 1 <= m, n <= 100
  • -1000 <= mat[i][j] <= 1000
  • 1 <= r, c <= 300

思路分析

  1. 若原矩阵的行列之积不等于rc之积,就表明不能重塑,则返回原矩阵
  2. 建立一个rc的res矩阵
  3. 将原矩阵的数据加入到一个新的一维矩阵ans中
  4. 将一维矩阵ans的数按照行顺序依次赋值到r*c矩阵中,返回res

AC 代码

class Solution(object):
    def matrixReshape(self, nums, r, c):
        """
        :type nums: List[List[int]]
        :type r: int
        :type c: int
        :rtype: List[List[int]]
        """
        if len(nums) * len(nums[0]) != r * c: return nums
        res = [[-1]*c for i in range(r)]
        
        ans = []
        for num in nums:
            for i in num:
                ans.append(i)
        
        m = 0
        while m < r:
            n = 0
            while n < c:
                res[m][n] = ans.pop(0)
                n += 1
            m += 1
        return res

总结

二维数组转一维数组突然有点遗忘了都,matlab都还给大学老师啦。

参考

重塑矩阵c渣渣 - 重塑矩阵 - 力扣(LeetCode) (leetcode-cn.com)

重塑矩阵简单思路 - 重塑矩阵 - 力扣(LeetCode) (leetcode-cn.com)