美文网首页
Array-832. Flipping an Image

Array-832. Flipping an Image

作者: oneSophia | 来源:发表于2018-11-19 16:29 被阅读0次

    地址:
    https://leetcode.com/problems/flipping-an-image/description/

    题目描述

    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

    解题思路:

    二维数组的每行数字翻转之后取反,即1变为0,0变为1

    解法1:(自己的)

    public static int[][] flipAndInvertImage1(int[][] A) {
            int[][]temp=new int[A.length][];
            for(int i=0;i<A.length;i++){
                temp[i]=flipArray(A[i]);
            }
            return temp;
        }
    
        public static int[] flipArray(int[] A){
            int len=A.length;
            int[] temp=new int[len];
            for(int i=0;i<len;i++){
                if(A[i]==0){
                    temp[len-i-1]=1;
                }else {
                    temp[len-i-1]=0;
                }
                System.out.println(temp[len-i-1]);
    
            }
            return temp;
        }
    

    通过时间:8ms

    解法2(别人的):

    private static void flipAndInvertImage(int[][] a) {
            int len=a[0].length;
            for(int[] m:a){
                for(int i=0;i<(len+1)/2;i++){
                    int temp=m[i]^1;
                    m[i]=m[len-1-i]^1;
                    m[len-1-i]=temp;
                }
            }
        }
    

    通过时间:4ms

    大神的思路是,对半翻转,同时取反,取反的时候应用的是与1的异或,这样的话,如果为0则变为1,如果为1则变为0.

    反思:这个题目是考察二维数组的操作,比如下标取值,对半翻转,还有位运算的异或取反等,可以作为单个的方法进行其他的运算。

    相关文章

      网友评论

          本文标题:Array-832. Flipping an Image

          本文链接:https://www.haomeiwen.com/subject/pekafqtx.html