天天看點

「翻轉圖像」python之leetcode刷題|003

「翻轉圖像」python之leetcode刷題|003

鎮樓

題目

給定一個二進制矩陣 A,我們想先水準翻轉圖像,然後反轉圖像并傳回結果。

水準翻轉圖檔就是将圖檔的每一行都進行翻轉,即逆序。例如,水準翻轉 [1, 1, 0] 的結果是 [0, 1, 1]。

反轉圖檔的意思是圖檔中的 0 全部被 1 替換, 1 全部被 0 替換。例如,反轉 [0, 1, 1] 的結果是 [1, 0, 0]。

示例 1:

輸入: [[1,1,0],[1,0,1],[0,0,0]]

輸出: [[1,0,0],[0,1,0],[1,1,1]]

解釋: 首先翻轉每一行: [[0,1,1],[1,0,1],[0,0,0]];

然後反轉圖檔: [[1,0,0],[0,1,0],[1,1,1]]

示例 2:

輸入: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]

輸出: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

解釋: 首先翻轉每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]];

然後反轉圖檔: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

說明:

  • 1 <= A.length = A[0].length <= 20
  • 0 <= A[i][j] <= 1

解答

這道題是數組操作,遇上python用清單切片操作完美解決,同時複習上一題的位運算。

class Solution:
    def flipAndInvertImage(self, A):
        """
        :type A: List[List[int]]
        :rtype: List[List[int]]
        """
        for i in range(len(A)):
            for j in range(len(A[0])):
                A[i][j] = A[i][j]^1
            A[i] = A[i][::-1]
            
        return A

           

用兩層for循環來操作二維數組裡的元素,進行異或位運算。再用python中清單的切片操作翻轉清單元素。

看一下執行結果

「翻轉圖像」python之leetcode刷題|003

執行結果

看一下網友代碼:

class Solution:
    def flipAndInvertImage(self, A):
        """
        :type A: List[List[int]]
        :rtype: List[List[int]]
        """
        result = []
        for line in A:
            line = line[::-1]
            result.append(list(map(lambda a : int(a!=1),line)))
        return result
           

剛開始也是想用map()函數,把元素周遊出來,得到結果的數字,沒有生成清單。網友代碼是先把元素逆序,然後再進行翻轉。

  • 這裡用到了lambda匿名函數,這個函數的的作用是翻轉數字。
  • 外層嵌套的map()函數接受兩個參數,一個是匿名函數lambda,一個是清單。
  • 因為map()函數是惰性,是以用list函數求出清單。

    你有更好的解答方法嗎,公衆号sixkery,歡迎一起交流。