leetcode(力扣) 566. 重塑矩阵 (降维升维法) (numpy法)
原创
©著作权归作者所有:来自51CTO博客作者深度不学习的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目在这: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类型 返回