题目在这​​:https://leetcode-cn.com/problems/reshape-the-matrix/​

题目分析 :

题目要求实现 MATLAB reshape函数。

题目所给的是二维数组,变成规定要求格式的二维数组。

法一:(降维升维)

可以先将二维数组变成一维数组,然后再变成二维数组。

循环遍历我们得到的一维数组。每次都加入到临时一维数组中,如果临时一维数组中的元素已经达到了题目所要求的数量,则将临时一维数组打包加入到二维数组中。

完整代码

class Solution:
def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:

ll_1D = [mat[i][j] for i in range(len(mat)) for j in range(len(mat[0]))] # 变成一维数组
# 这个列表推导式我总写反,其实就是从左往右读,拿mat去第一次for里循环,再拿去第二层里循环,显然第一层的for是外层循环 有几行,里面那个for循环每一行有几个字符,这样就好记了。



if r * c != len(mat) * len(mat[0]): # 加入违规矩阵判断
return mat


temp_1D = [] # 临时一维数组
res = []

for i in range(len(ll_1D)):
temp_1D.append(ll_1D[i])
if (i+1) % c == 0:
res.append(temp_1D) # 将临时一维数组打包加入二维数组
temp_1D = [] # 重置当前一维数组

return

法二:(Numpy法)

Python3里的Numpy库可以很简单的解决这类问题。
核心代码仅一行即可。也就是和MATLAB里相同的reshape函数。

完整代码

class Solution:
def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
if r*c != len(mat) * len(mat[0]):
return mat
import numpy as np
temp = np.array(mat) # 变成numpy类型
res = temp.reshape(r,c) # 重塑
return res.tolist() # 再变回去list类型 返回