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

LeetCode 832: Flipping an Image

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

基本資料
#

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

  • 提交紀錄:Runtime Error ×7 → Accepted

解題思路
#

每一列左右反轉後再反相。左右指針同時處理(Two Pointers 模板一):交換 row[l]、row[r] 的同時各自 ^ 1;l == r 的中間那格只要反相一次。

我的嘗試
#

前七次都是 RE:第一版用 / 算迴圈次數,得到浮點數放進 range(TypeError);改成 // 之後,這版和後面五版都回傳或使用了不存在的變數 A(參數名稱是 image,NameError)。第一版的交換也寫成 row[-i]:i = 0 時 row[-0] 就是 row[0] 而不是最後一格,整個差了一格,應該是 row[-1 - i]。最後一行 list comprehension 改用 image 才 AC。

正確解法
#

class Solution:
    def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
        for row in image:
            l, r = 0, len(row) - 1
            while l <= r:
                row[l], row[r] = row[r] ^ 1, row[l] ^ 1
                l, r = l + 1, r - 1
        return image

複雜度
#

時間 O(n²),空間 O(1)。

要特別避免的錯誤
#

  • l == r 時同時指定也只會反相一次,剛好正確。

面試口說整理
#

我對每一列用左右指針,交換兩端的同時各自做 XOR 1 反相,中間那格只反相一次。時間 O(n²)、空間 O(1)。

相關文章

LeetCode 821: Shortest Distance to a Character
·1 分鐘
LeetCode Easy Array Two-Pointers String
LeetCode 821 解題筆記:左往右掃一次記錄到左邊最近的 c 的距離,右往左再掃一次取較小值
LeetCode 766: Toeplitz Matrix
·1 分鐘
LeetCode Easy Array Matrix
LeetCode 766 解題筆記:同一條對角線的元素都相同,等價於每一格都等於左上角那格
LeetCode 733: Flood Fill
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 733 解題筆記:從起點 DFS / BFS,四個方向上跟起點原本顏色相同的格子都換成新顏色;新舊顏色相同時直接回傳
LeetCode 645: Set Mismatch
·1 分鐘
LeetCode Easy Array Hash-Table Bit-Manipulation Sorting
LeetCode 645 解題筆記:用總和算:missing = 1..n 的和 - set 的和,duplicate = 陣列總和 - set 的和
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)