Problem
Given an n x n
binary matrix image
, 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]
.
Examples
Example 1
|
|
Example 2
|
|
Constraints
n == image.length
n == image[i].length
1 <= n <= 20
images[i][j]
is either0
or1
.
Solution
Method 1 – Two-Pointer Row Reversal and Bitwise Inversion
Intuition
We can flip each row in place using two pointers (one from each end), and simultaneously invert the values using bitwise XOR. This is efficient and avoids extra space.
Approach
- For each row in the matrix:
- Use two pointers (
l
andr
) to swap elements from both ends. - While swapping, invert both elements using
1 - x
orx ^ 1
. - If the row has odd length, invert the middle element.
- Use two pointers (
- Return the modified matrix.
Code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Complexity
- ⏰ Time complexity:
O(n^2)
, since each element in the matrix is visited once. - 🧺 Space complexity:
O(1)
, as the operation is done in place.