Flipping an Image

Arrangement

Problem

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].

For example:

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]]

Thought Process

  • This question is very similar to Rotate Image/Matrix, only difference here is we are only flipping the image horizntally, i.e. across the vertical line of symmetry

Solution

class Solution:
    def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
        N = len(A[0])
                
        for i in range(len(A)):
            for j in range(len(A[0])):
                if A[i][j] == 1:
                    A[i][j] = 0
                elif A[i][j] == 0:
                    A[i][j] = 1
                    
        for i in range(len(A)):
            for j in range(len(A[0])//2):
                temp = A[i][N-1-j]
                A[i][N-1-j] = A[i][j]
                A[i][j] = temp
        return(A)
        

Key Facts

  • Flipping the image horizontally across the vertical line of symmetry

  • Remember when flipping horizontally, we only go until the halfway point for each row

Time Complexity

  • Time: O(n2)O(n^2)

  • Space: O(1)O(1)

Last updated