0832. Flipping an Image #
题目 #
给定一个 n x n 的二进制矩阵 image ,先 水平 翻转图像,然后 反转 图像并返回 结果 。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。
例如,水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。
例如,反转 [0,1,1] 的结果是 [1,0,0]。
思路 #
代码 #
class Solution {
public void swap(int[][] image, int r1, int c1, int r2, int c2) {
/** 对于数组元素来讲,这里的最终结果都是0*/
image[r1][c1] ^= image[r2][c2];
image[r2][c2] ^= image[r1][c1];
image[r1][c1] ^= image[r2][c2];
}
public int[][] flipAndInvertImage(int[][] image) {
int M = image.length, N = image[0].length;
/** flip horizontally */
for (int m = 0; m < M; m++) {
int n1 = 0, n2 = N - 1;
while (n1 < n2) {
swap(image, m, n1, m, n2);
n1 += 1;
n2 -= 1;
}
}
/** invert */
for (int m = 0; m < M; m++) {
for (int n = 0; n < N; n++) {
image[m][n] = 1 - image[m][n];
}
}
return image;
}
}