
鎮樓
題目
給定一個二進制矩陣 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中清單的切片操作翻轉清單元素。
看一下執行結果
執行結果
看一下網友代碼:
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,歡迎一起交流。