美文网首页
Leetcode_566_Array

Leetcode_566_Array

作者: 转身丶即天涯 | 来源:发表于2017-12-02 17:52 被阅读11次
    image.png
    image.png

    题目大致意思:
    在MATLAB中,有个非常有用的功能叫“reshape”,它能将一个矩阵转换成另一个不同大小的矩阵,而且新矩阵保持原始数据。
    给定一个用二维数组表示的矩阵,用两个正整数r和c分别表示要重塑矩阵的行数和列数。
    这个重塑的矩阵需要用原矩阵元素的行遍历顺序填充。
    如果“reshape”操作的参数是可能并合理的,输出新的矩阵,否则,输出原矩阵。

    思路:
    先把二维矩阵转换成一维数组。然后根据输入创建一个空的二维矩阵(先把模型搭好),然后把一维数组中的内容依次填入空的二维矩阵。

    代码:

    def solution(nums, r, c):
        l = []
        for i in nums:
            for j in i:
                l.append(j)
        print(l)
        if r*c != len(l):
            return nums
        else:
            k = []
            for i in range(len(l)//c):
                k.append(l[i*c:(i+1)*c])
            return k
    
    nums = [[1, 2],
            [3, 4]]
    nums2 = [[1, 2, 3, 4]]
    print(solution(nums2, 2, 2))
    

    反思:
    在给空二维数组赋值时脑子短路了,一直想不明白k.append(l[ic:(i+1)c]).
    在一句代码看不懂的时候,先把它细化拆分。
    比如这句代码,我们知道append是给list拼接元素。
    再看内部,使用切片截取list中的元素。c是二维数组的宽度(一行有多少个元素)。
    那么它们每行都是c个元素,当i=0,c=4时,[[4个元素]],等等。想不明白就把值代入去算一下,很快就会明白了。

    相关文章

      网友评论

          本文标题:Leetcode_566_Array

          本文链接:https://www.haomeiwen.com/subject/lxuwbxtx.html