832. Flipping an Image

Link: 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

題目翻譯:

給定二進制矩陣 A,我們想要水平翻轉圖像,然後反轉它,並返回結果圖像。

水平翻轉圖像意味著圖像的每一行都是相反的。例如,水平翻轉[1,1,0]會產生[0,1,1]。

反轉圖像意味著每個 0 替換為 1,每個 1 替換為 0.例如,反轉[0,1,1]會產生[1,0,0]。

程式思路:

很基本二維陣列(圖像處理)題目,邊 reverse 邊 invert。

class Solution {
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
        const int row = A.size();
        const int col = A[0].size();
        for(int i = 0; i < row ; i++)
        {
            int fpos = 0;
            int lpos = col - 1;
            while(fpos < lpos)
            {
                //invert
                A[i][fpos] = (A[i][fpos] == 0)? 1 : 0;
                A[i][lpos] = (A[i][lpos] == 0)? 1 : 0;
                //reverse
                swap(A[i][fpos++],A[i][lpos--]);
            }
            if(fpos == lpos)
                A[i][fpos] = (A[i][fpos] == 0)? 1 : 0;
        }
        return A;
    }
};

  轉載請註明: YuYan's blog 832. Flipping an Image

  目錄