LeetCode简单题之重塑矩阵
題目
在 MATLAB 中,有一個非常有用的函數(shù) reshape ,它可以將一個 m x n 矩陣重塑為另一個大小不同(r x c)的新矩陣,但保留其原始數(shù)據(jù)。
給你一個由二維數(shù)組 mat 表示的 m x n 矩陣,以及兩個正整數(shù) r 和 c ,分別表示想要的重構(gòu)的矩陣的行數(shù)和列數(shù)。
重構(gòu)后的矩陣需要將原始矩陣的所有元素以相同的 行遍歷順序 填充。
如果具有給定參數(shù)的 reshape 操作是可行且合理的,則輸出新的重塑矩陣;否則,輸出原始矩陣。
示例 1:
輸入:mat = [[1,2],[3,4]], r = 1, c = 4
輸出:[[1,2,3,4]]
示例 2:
輸入:mat = [[1,2],[3,4]], r = 2, c = 4
輸出:[[1,2],[3,4]]
提示:
m == mat.length
n == mat[i].length
1 <= m, n <= 100
-1000 <= mat[i][j] <= 1000
1 <= r, c <= 300
來源:力扣(LeetCode)
??矩陣能否重塑成功,取決于它們的元素個數(shù)是否相等所以行列數(shù)相乘必須相等才能進行接下來的操作。重塑的基本操作就是遍歷原矩陣然后將元素一個一個的放入新的矩陣中,當(dāng)然根據(jù)python的特性也可以直接在原來的矩陣上進行拼接,但是這可能會遇到有一些情況使得我們不得不轉(zhuǎn)置矩陣,所以采取一個一個放入的策略就是最方便和最兼容的。
class Solution:def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:m=len(mat)n=len(mat[0])if m*n!=r*c:return mat#這里不能用M=r*[c*[0]],python組內(nèi)相同的列表指針是同一個。M=[[0] * c for i in range(r)]x=0y=0for i in range(m):for j in range(n):M[x][y]=mat[i][j]y+=1if y==c:y=0x+=1return M
總結(jié)
以上是生活随笔為你收集整理的LeetCode简单题之重塑矩阵的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之数组拆分 I
- 下一篇: LeetCode简单题之至少是其他数字两