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;
}
博客围绕二维二进制矩阵处理展开,要对矩阵先水平翻转,再将0和1互换。思路是直接翻转,因二维数组地址不连续,逐行用双指针处理一维数组,用与1的异或实现0和1翻转,双指针操作时要注意left<=right,避免奇数行中间位被漏。
381

被折叠的 条评论
为什么被折叠?



