1. 程式人生 > 其它 >leetcode 832. Flipping an Image(python)

leetcode 832. Flipping an Image(python)

技術標籤:leetcodeleetcode

描述

Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resulting image.

To flip an image horizontally means that each row of the image is reversed. For example, flipping [1, 1, 0] horizontally results in [0, 1, 1].

To invert an image means that each 0 is replaced by 1, and each 1 is replaced by 0. For example, inverting [0, 1, 1] results in [1, 0, 0].

Example 1:

Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]
Explanation: First reverse each row: [[0,1,1],[1,0,1],[0,0,0]].
Then, invert the image: [[1,0,0],[0,1,0],[1,1,1]]

Example 2:

Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

Notes:

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

解析

這裡的題意比較簡單,如果是常規做法可能程式碼很繁瑣,在本解答演算法中主要用到了 Python 中的一些 list 索引的使用小技巧,還有位運算的小知識點。

解答

class Solution(object):
def flipAndInvertImage(self, A):
    """
    :type A: List[List[int]]
    :rtype: List[List[int]]
    """
    for row in A:
        for i in range((len(row)+1)/2):
            row[i], row[~i] = row[~i]^1, row[i]^1
    return A

執行結果

Runtime: 36 ms, faster than 81.20% of Python online submissions for Squares of a Sorted Array.
Memory Usage: 11.7 MB, less than 55.29% of Python online submissions for Squares of a Sorted Array.

每日格言:與魔鬼戰鬥的人,應當小心自己不要成為魔鬼。當你遠遠凝視深淵時,深淵也在凝視你。