題目描述
在MATLAB中,有一個非常有用的函數 reshape,它可以將一個矩陣重塑爲另一個大小不同的新矩陣,但保留其原始數據。
給出一個由二維數組表示的矩陣,以及兩個正整數r和c,分別表示想要的重構的矩陣的行數和列數。
重構後的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。
如果具有給定參數的reshape操作是可行且合理的,則輸出新的重塑矩陣;否則,輸出原始矩陣。
class Solution:
def matrixReshape(self, nums: List[List[int]], r: int, c: int) -> List[List[int]]:
算法思路
a,b=len(nums),len(nums[0])
if a*b!=r*c:return nums
ls=[nums[i][j]for i in range(a) for j in range(b)]
ls.reverse()
rec=[];tmp=[]
for i in range(r):
for j in range(c):
tmp.append(ls.pop())
rec.append(tmp[:])
tmp.clear()
return rec
優化
a,b=len(nums),len(nums[0])
if a*b!=r*c:return nums
ls=[nums[i][j]for i in range(a) for j in range(b)]
rec=[]
for i in range(0,a*b,c):
rec.append(ls[i:i+c])
return rec