832. Flipping an Image [Easy]

https://leetcode.com/problems/flipping-an-image/

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

算法思路:

  • flip and insert can finish at once
  • use tow pointer technology
  • xor operation accelerate the speed
class Solution {
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
        int m = A.size(); int n = A[0].size();
        for (int i = 0; i < m; i++) {
            filpAndInvertOneRow(A, i, n);
        }
        return A;
    }
private:    
    void filpAndInvertOneRow(vector<vector<int>>& A, int row, const int& n) {
        int left = 0; int right = n - 1;
        while (left <= right) {
            if (A[row][left] == A[row][right]) {
                A[row][left] ^= 1;
                A[row][right] = A[row][left];
            }
            left++;
            right--;
        }
    }
};

 

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页