1. 程式人生 > >LeetCode.832. Flipping an Image

LeetCode.832. Flipping an Image

題目的大意為給定一個二階矩陣,先水平逆序,然後再做0-1替換。

比如:

Input: [[1,1,0],[1,0,1],[0,0,0]]
Output: [[1,0,0],[0,1,0],[1,1,1]]

或者

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

有種最簡單的做法也是比較慢的做法,就是暴力求解,時間複雜度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;
    }

受教了。

希望有一天我也能變成大神,加油!