头像

带翅膀的猫

时光荏苒,我们一直都在

《LeetCode刷题(Easy Rank):832. Flipping an Image》

 1月前  •   LeetCode  •     •   12  •   0

Question:

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]]

Example 2:

示例Input: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
Output: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
Explanation: First reverse each row: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]].
Then invert the image: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]

Notes:

  • 1 <= A.length = A[0].length <= 20
  • 0 <= A[i][j] <= 1

Solution:

JAVAclass Solution {
    public int[][] flipAndInvertImage(int[][] A) {
        for(int i=0;i<A.length;i++){
            int left=0,right=A[0].length-1;
            while(left<right){
                if(A[i][left]+A[i][right]!=1){//两个数都为0或都为1
                    A[i][left]=Math.abs(A[i][left]-1);//如果是1则变为0,是0则变为1
                    A[i][right]=Math.abs(A[i][right]-1);
                }
                left++;
                right--;
            }
            if(left==right)
                A[i][left]=Math.abs(A[i][left]-1);//中间数为0则变为1,为1则变为0
        }
        return A;
    }
}

此题本质上是当前数对称位置处的数与1异或(XOR)的结果。

JAVAclass Solution {
    public int[][] flipAndInvertImage(int[][] A) {
        for(int i = 0 ; i < A.length ; i ++){
            for(int j = 0; j * 2 < A[i].length; j++){
                int temp = A[i][j];
                A[i][j] = A[i][A[i].length - j - 1] ^ 1;
                A[i][A[i].length - j - 1] = temp ^ 1;
            }
        }
        return A;
    }
}

 

上一篇:
下一篇:

 评论


 已有0条评论

    还没有任何评论,你来说两句吧!