↓快轉到主要內容
  1. LeetCode/

LeetCode 566: Reshape the Matrix

·1 分鐘· ·
LeetCode Easy Array Matrix Simulation
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-27

  • 提交紀錄:Runtime Error ×3 → Wrong Answer → Runtime Error ×3 → Accepted ×2

解題思路
#

把矩陣想成一條按列展開的序列(Matrix 模板二):第 k 個元素在原矩陣是 (k // n, k % n),在新矩陣是 (k // c, k % c)。m × n != r × c 時不能重塑,照題目回傳原矩陣。

我的嘗試
#

這題提交了 9 次:

  • 前三版語法錯誤;第四版不能重塑時回傳 False(題目要回傳原矩陣),而且每 r 個切一段、還多包了一層 list。
  • 改成回傳原矩陣之後,每一列的長度寫成 c // r,r > c 時是 0(ValueError);接著寫成 mat // r,list 不能除(TypeError)。最後改成 len(mat) // r,也就是 c,才 AC。

正確解法
#

class Solution:
    def matrixReshape(self, mat: List[List[int]], r: int, c: int) -> List[List[int]]:
        m, n = len(mat), len(mat[0])
        if m * n != r * c:
            return mat
        res = [[0] * c for _ in range(r)]
        for k in range(m * n):
            res[k // c][k % c] = mat[k // n][k % n]
        return res

複雜度
#

時間 O(mn),空間 O(mn)(輸出)。

要特別避免的錯誤
#

  • 不能重塑時回傳原矩陣,不是 False。
  • 每一列有 c 個元素,切片的長度是 c,不是 r。

面試口說整理
#

我把矩陣看成按列展開的一條序列,第 k 個元素在原矩陣是 k // n、k % n,在新矩陣是 k // c、k % c;元素總數不同就回傳原矩陣。時間 O(mn)。

相關文章

LeetCode 463: Island Perimeter
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 463 解題筆記:每格陸地貢獻 4 條邊,每跟上方或左方的陸地相鄰一次就少 2 條
LeetCode 495: Teemo Attacking
·1 分鐘
LeetCode Easy Array Simulation
LeetCode 495 解題筆記:每次攻擊貢獻 min(到下一次攻擊的間隔, duration),最後一次貢獻完整的 duration
LeetCode 561: Array Partition
·1 分鐘
LeetCode Easy Array Greedy Sorting Counting-Sort
LeetCode 561 解題筆記:排序後相鄰兩個一組,每組的最小值就是偶數位置的數,加總
LeetCode 575: Distribute Candies
·1 分鐘
LeetCode Easy Array Hash-Table
LeetCode 575 解題筆記:最多只能吃 n / 2 顆,種類最多 len(set),答案是兩者的較小值
LeetCode 414: Third Maximum Number
·1 分鐘
LeetCode Easy Array Sorting
LeetCode 414 解題筆記:記錄三個不同的最大值,重複的數跳過;不到三個不同的數就回傳最大值
LeetCode 415: Add Strings
·1 分鐘
LeetCode Easy Math String Simulation
LeetCode 415 解題筆記:兩個指標從尾巴往前逐位相加,記錄進位,迴圈結束後還有進位要補上