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个元素]],等等。想不明白就把值代入去算一下,很快就会明白了。
网友评论