0832. Flipping an Image

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;
    }
}