[leetcode][easy][Array][832]Flipping an Image]

Flipping an Image

题目链接

题目描述

给定一个二维矩阵A。翻转它,并取反,返回结果。

注:

  • 翻转:颠倒图片每行。例如[1, 1, 0]变为 [0, 1, 1]
  • 取反:所有的0换成1,所有的1换成0。

约定

1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1

示例

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

解答

解答1


class Solution
{
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A)
    {
        int rowNum = A.size();
        int colNum = A[0].size();
        int colMid = (colNum+1)/2;
        //按行遍历
        for (int rowIndex = 0; rowIndex < rowNum; rowIndex++)
        {
            for (int colIndex = 0; colIndex < colMid; colIndex++)
            {
                int temp = A[rowIndex][colIndex];
                A[rowIndex][colIndex] = A[rowIndex][colNum - colIndex - 1] == 1 ? 0 : 1;
                A[rowIndex][colNum - colIndex - 1] = temp == 1 ? 0 : 1;
            }
        }
        return A;
    }
};

以上代码比较简洁,耗时16ms。

解答2

class Solution
{
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A)
    {
        flip(A);
        invert(A);
        return A;
    }
private:
    void flip(vector<vector<int>>& A)
    {
        int rowNum = A.size();
        int colNum = A[0].size();
        //按行遍历
        for (int rowIndex = 0; rowIndex < rowNum; rowIndex++)
        {
            for (int colIndex = 0; colIndex < colNum/2; colIndex++)
            {
                int temp = A[rowIndex][colIndex];
                A[rowIndex][colIndex] = A[rowIndex][colNum - colIndex - 1];
                A[rowIndex][colNum - colIndex - 1] = temp;
            }
        }
    }
    void invert(vector<vector<int>>& A)
    {
        int rowNum = A.size();
        int colNum = A[0].size();
        for (int rowIndex = 0; rowIndex < rowNum; rowIndex++)
        {
            for (int colIndex = 0; colIndex < colNum; colIndex++)
            {
                A[rowIndex][colIndex] = A[rowIndex][colIndex] == 1 ? 0 : 1;
            }
        }
    }
};

此种方法不太简洁,但耗时8ms,超过99.5%。

猜你喜欢

转载自www.cnblogs.com/libinyl/p/10131090.html