1170. 重塑矩阵

1170. 重塑矩阵

中文English

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

先给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示所需重新整形矩阵的行数和列数。

重新形成的矩阵需要用原始矩阵的所有元素以相同的行遍历顺序填充。

如果使用给定参数的“重塑”操作是可能且合法的,则输出新的重新整形矩阵; 否则,输出原始矩阵。

样例

样例1:

输入: 
nums = 
[[1,2],
 [3,4]]
r = 1, c = 4
输出: 
[[1,2,3,4]]
解释:
行遍历的顺序为 [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, 100]。
给出的r和c都为正数。

输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param nums: List[List[int]]
    @param r: an integer
    @param c: an integer
    @return: return List[List[int]]
    """
    '''
    大致思路:
    1.首先,初始化res = [],l = [],得到nums的维度,即len(nums)和len(nums[0]),和r*c进行判断,如果乘积>=r*c的话,则说明可以重塑矩阵,否则输入原矩阵。
    2.先将nums拼接成一维数组,即l = [...]的形式,
    3.如果可以重塑矩阵的话,根据给出的r和c,进行循环l,给出current_dic = [],如果长度为c的话,则append到res里面,一直到res长度为r的时候break,最后返回res
    '''
    def matrixReshape(self,nums,r,c):
        res = []
        current_dic = []
        l = []

        #如果不符合条件的话
        if len(nums[0])*len(nums) < r*c:
            return  nums
        
        for i in nums:
            l.extend(i)

        #否则
        for column in l:
            current_dic.append(column)
            if len(current_dic) == c:
                res.append(current_dic)
                current_dic = []
            if len(res) == r:
                return res

 

 

posted @ 2020-04-12 15:41  风不再来  阅读(213)  评论(0编辑  收藏  举报