---
description: Arrangement
---

# Flipping an Image

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

{% hint style="info" %}
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]]
```
{% endhint %}

### 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&#x20;

## 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&#x20;


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

## Time Complexity

* **Time:** $$O(n^2)$$&#x20;
* **Space:** $$O(1)$$&#x20;

