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

LeetCode 766: Toeplitz Matrix

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

基本資料
#

難易度: easy 第一次嘗試:2022-09-06

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

解題思路
#

同一條左上到右下的對角線上,i - j 相同(Matrix 模板三)。所有對角線都是常數,等價於每個 i, j >= 1 都有 matrix[i][j] == matrix[i - 1][j - 1],一次掃描就好,也只需要記住上一列,適合進階題「一次只能讀一列」。

我的嘗試
#

前兩版在每一列前面補 None,讓對角線變成直的再用 zip 取出來,但每一列補完長度不同,zip 會截斷到最短的那一列,有些對角線根本沒比到;判斷 None 的條件也寫錯了,有 None 而且只有一種數字時落到了 elif:[[1], [1]] 回傳 False、[[0, 1], [0, 1], [1, 0]] 回傳 True。改成逐列比對才 AC。

正確解法
#

class Solution:
    def isToeplitzMatrix(self, matrix: List[List[int]]) -> bool:
        return all(matrix[i][j] == matrix[i - 1][j - 1]
                   for i in range(1, len(matrix)) for j in range(1, len(matrix[0])))

複雜度
#

時間 O(mn),空間 O(1)。

要特別避免的錯誤
#

  • 只要比較相鄰的左上角,不需要把對角線整條取出來。

面試口說整理
#

每條對角線都相同,等價於每一格都等於它左上角的那格,所以我掃一次比較就好,只需要上一列。時間 O(mn)、空間 O(1)。

相關文章

LeetCode 733: Flood Fill
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 733 解題筆記:從起點 DFS / BFS,四個方向上跟起點原本顏色相同的格子都換成新顏色;新舊顏色相同時直接回傳
LeetCode 661: Image Smoother
·1 分鐘
LeetCode Easy Array Matrix
LeetCode 661 解題筆記:每格取周圍 3 × 3 範圍內存在的格子平均,向下取整;結果要寫到新的矩陣
LeetCode 566: Reshape the Matrix
·1 分鐘
LeetCode Easy Array Matrix Simulation
LeetCode 566 解題筆記:元素總數不同就回傳原矩陣;否則第 k 個元素放到 (k // c, k % c)
LeetCode 463: Island Perimeter
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 463 解題筆記:每格陸地貢獻 4 條邊,每跟上方或左方的陸地相鄰一次就少 2 條
LeetCode 744: Find Smallest Letter Greater Than Target
·1 分鐘
LeetCode Easy Array Binary-Search
LeetCode 744 解題筆記:找第一個 > target 的字母(upper bound);找不到就繞回第一個
LeetCode 747: Largest Number At Least Twice of Others
·1 分鐘
LeetCode Easy Array Sorting
LeetCode 747 解題筆記:掃一次找最大和第二大,最大 >= 2 × 第二大就回傳最大值的 index;用乘法避免除以 0