1. 程式人生 > >leetcode-832-反轉影象

leetcode-832-反轉影象

給定一個二進位制矩陣,先水平翻轉矩陣,然後翻轉它,水平翻轉意味著第一個位置上的數與最後一個位置上的數進行交換,反轉的意思是1變0,0變1,

思路:考慮使用陣列的交換加異或運算,所有運算可以理解為一行行的處理,每一行的內容與其他行都是不相關的,用異或運算很巧妙,反正我是沒想到,意思就是,將陣列水平翻轉的同時進行異或運算,如果翻轉後的值是1,那麼反轉(與1異或)就是0,如果翻轉後的值是0,與1異或(反轉)就是1

class Solution {
    public int[][] flipAndInvertImage(int[][] A) {
        int c = A[0].length;
        for(int[] row:A)
            for(int i = 0;i<(c+1)/2;++i){
                int tmp = row[i]^1;
                row[i] = row[c-1-i]^1;
                row[c-1-i] = tmp;
            }
        return A;
    }
}