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].
Example 1:
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]]
翻转图像,同时把0和1翻转。
思路:
直接翻转
二维数组地址不连续,一行一行地处理一维数组,双指针翻转
用与1的异或进行0,1的翻转
双指针时注意要left<=right,不然奇数时中间的一位会被漏掉
public int[][] flipAndInvertImage(int[][] A) {
int n = A[0].length;
for(int[] row : A) {
int left = 0;
int right = n - 1;
while(left <= right) {
int tmp = row[left] ^ 0x0001;
row[left] = row[right] ^ 0x0001;
row[right] = tmp;
left ++;
right --;
}
}
return A;
}