Horizontally Flip a Binary Matrix

• Difficulty Level : Easy
• Last Updated : 03 Sep, 2021

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

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

 # Python3 implementation of above approach# Function to return final Image def flipped_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 codemat = [[1, 1, 0, 0], [1, 0, 0, 1], [0, 1, 1, 1], [1, 0, 1, 0]] print(flipped_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.

C++14

 //c++ program to flip the binary image horizontally#includeusing namespace std;//function to flip the matrix using two pointer techniquevector> flip_matrix(vector>matrix){    for(int i=0;i>matrix={{1,1,0},{1,0,1},{0,0,0}};    vector>v=flip_matrix(matrix);    for(int i=0;i

My Personal Notes arrow_drop_up