LeetCode T832,Flipping an Image

给定一个二阶矩阵,先做水平逆序,然后0,1替换。

比如:
  输入: [[1,1,0],[1,0,1],[0,0,0]]
  输出: [[1,0,0],[0,1,0],[1,1,1]]
  解释: 首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]];然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]

我在做的时候首先想到了暴力求解,两层循环,时间复杂度为O(n^2),

    public int[][] flipAndInvertImage(int[][] A) {
        int[][] result = new int[A.length][A.length];
        int[] temp = new int[A.length];
        for (int i = 0; i < A.length; i++) {
            for (int j = 0; j < A[i].length; j++) {
                result[i][A[i].length - 1 - j] = A[i][j] == 0 ? 1 : 0;
            }
        }
        return result;
    }

刚开始刷题,写的比较差,就去看了一下其他的大神的解法,其中有一位大神的解法,让我觉着十分的牛批:

    public int[][] flipAndInvertImage(int[][] A) {
        int n = A.length;
        for (int[] row : A)
            for (int i = 0; i * 2 < n; i++)
                if (row[i] == row[n - i - 1])
                    row[i] = row[n - i - 1] ^= 1;
        return A;
    }

膜拜,希望有一天我也能成为大神,加油。


jzhp
0 声望0 粉丝