zoukankan      html  css  js  c++  java
  • 算法21----重塑矩阵 LeetCode566

    1、题目

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

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

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

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

    示例 1:

    输入: 
    nums = 
    [[1,2],
     [3,4]]
    r = 1, c = 4
    输出: 
    [[1,2,3,4]]
    解释:
    行遍历nums的结果是 [1,2,3,4]。新的矩阵是 1 * 4 矩阵, 用之前的元素值一行一行填充新矩阵。
    

    示例 2:

    输入: 
    nums = 
    [[1,2],
     [3,4]]
    r = 2, c = 4
    输出: 
    [[1,2],
     [3,4]]
    解释:
    没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。
    

    注意:

    1. 给定矩阵的宽和高范围在 [1, 100]。
    2. 给定的 r 和 c 都是正数。

    2、思路

    先将原始矩阵转化成一个迭代器,所有数都放进去,【也可以放进队列中】,然后创建一个新的矩阵(大小为reshape的大小),一个一个往里放数。

    将列表转化成迭代器可以用itertools模块下chain.from_iterable(列表) 函数。然后用next函数一个一个取数

    还有一个重点:创建二维矩阵的一种方法:

                    for i in range(r):
                        result.append([])
                        for j in range(c):
                            result[i].append(next(chainnum))

    第二种:result = [ [ ] * r for i in range(c) ] 【列表生成器】

    3、代码

    from itertools import chain
    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 not nums:
                return nums
            elif not r or not c:
                return nums
            else:
                h=len(nums)
                l=len(nums[0])
                if h*l != r*c:
                    return nums
                else:
                    chainnum = chain.from_iterable(nums)
                    result = []
                    for i in range(r):
                        result.append([])
                        for j in range(c):
                            result[i].append(next(chainnum))
                    return result
  • 相关阅读:
    HUNAN 11562 The Triangle Division of the Convex Polygon(大卡特兰数)
    HUNAN 11560 Yangyang loves AC(二分+贪心)
    CSU 1425 Prime Summation
    CSU 1424 Qz’s Maximum All One Square
    一个奇怪的语法问题
    CSU 1416 Practical Number
    CSU 1412 Line and Circles
    Android第一篇
    强大到无与伦比的Graphviz
    CSU 1355 地雷清除计划
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/9460503.html
Copyright © 2011-2022 走看看