# Horizontally Flip a Binary Matrix

Given a binary matrix. The task is to flip the matrix horizontally(find the image of the matrix), then invert it.

Note:

• To flip a matrix horizontally means that reversing each row of the matrix. For example, flipping [1, 1, 0, 0] horizontally results in [0, 0, 1, 1].
• To inverta matrix means that replacing each 0 by 1 and vice-versa. For example, inverting [0, 0, 1] results in [1, 1, 0].

Examples:

```Input: mat[][] = [[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]]

Input: mat[][] = [[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]]
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: We can do this in-place. On observing carefully, it can be deduced that in each row in the final matrix, the i-th value from the left is equal to the inverse of the i-th value from the right of the input binary matrix.

Thus, we use (Column + 1) / 2 (with floor division) to iterate over all indexes in the first half of the row, including the centre and updating the answer accordingly.

Below is the implementation of above approach:

 `# Python3 implementation of above approach ` `# Function to return final Image ` ` `  `def` `fliped_Invert_Image(mat): ` ` `  `    ``for` `row ``in` `mat: ` `        ``for` `i ``in` `range``((``len``(row) ``+` `1``) ``/``/` `2``): ` ` `  `            ``row[i] ``=` `row[``len``(row) ``-` `1` `-` `i] ^ ``1` `            ``row[``len``(row) ``-` `1` `-` `i] ``=` `row[i] ^ ``1` ` `  `    ``# return Flipped and Inverted image ` `    ``return` `mat ` ` `  `# Driver code ` `mat ``=` `[[``1``, ``1``, ``0``, ``0``], [``1``, ``0``, ``0``, ``1``], [``0``, ``1``, ``1``, ``1``], [``1``, ``0``, ``1``, ``0``]] ` ` `  `print``(fliped_Invert_Image(mat)) `

Output:

```[[1, 1, 0, 0], [0, 1, 0, 1], [0, 0, 1, 1], [1, 0, 1, 0]]
```

Time Complexity: O(N*M), where N is the number of rows and M is the number of columns in the given binary matrix.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.