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
 

这道题让我们翻转图像,翻转的方法是对于二维数组的每一行,先将所有元素位置翻转一下,然后再按顺序将每个像素值取个反。既然要求这么直接明了,那么就按照其说的一步一步来呗,首先翻转每一行,记得一定要加 ‘&’ 号,不然原数组不会被修改。然后在遍历每个数字,让其或上1,达到取反的目的,当然还是必须要加 ‘&’ 号,最后返回修改后的A数组即可,参见代码如下:

解法一:

class Solution {
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
for (auto &row : A) reverse(row.begin(), row.end());
for (auto &row : A) {
for (int &num : row) num ^= ;
}
return A;
}
};

上面的方法虽然直接了当,但是毕竟修改了原数组A,再来看一种不修改的方法,这里我们新建一个跟A一样长的二维数组,只不过里面的各行还是空的。然后我们遍历A数组的各行,但在遍历各行上的数字时,我们采用从后往前的遍历顺序,然后对于每个数字取反在加入结果res中,这样直接将翻转和取反同时完成了,参见代码如下:

解法二:

class Solution {
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
vector<vector<int>> res(A.size());
for (int i = ; i < A.size(); ++i) {
for (int j = (int)A[i].size() - ; j >= ; --j) {
res[i].push_back(!A[i][j]);
}
}
return res;
}
};

参考资料:

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

https://leetcode.com/problems/flipping-an-image/discuss/130590/C%2B%2BJavaPython-Reverse-and-Toggle

LeetCode All in One 题目讲解汇总(持续更新中...)

[LeetCode] Flipping an Image 翻转图像的更多相关文章

  1. Leetcode832.Flipping an Image翻转图像

    给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]. 反转图片的 ...

  2. Leetcode#832. Flipping an Image(翻转图像)

    题目描述 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]. ...

  3. Java实现 LeetCode 832 翻转图像(位运算)

    832. 翻转图像 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

  4. leetcode-832翻转图像

    翻转图像 思路: 先对图像进行水平翻转,然后反转图片(对每个像素进行异或操作) 代码: class Solution: def flipAndInvertImage(self, A: List[Lis ...

  5. [LeetCode] 190. Reverse Bits 翻转二进制位

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  6. [Swift]LeetCode832. 翻转图像 | Flipping an Image

    Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resu ...

  7. Leetcode 832.翻转图像

    1.题目描述 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1] ...

  8. 力扣(LeetCode)832. 翻转图像

    给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]. 反转图片的 ...

  9. 力扣832. 翻转图像-C语言实现-简单题

    题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

随机推荐

  1. 关于docker使用

    docker讲解:http://dockone.io/article/6051 os: ubuntu 16.04;docker version 18.06.1-ce; (1)查看docker版本:do ...

  2. DotNet 资源大全(转)

      awesome-dotnet 是由 quozd 发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. https://github.com/jo ...

  3. 关于codeforces国内访问卡顿慢的最新解决办法,谷歌字体库/屏蔽facebook链接

    在host里最后加上 方法起源来自于https://blog.csdn.net/qq_40693171/article/details/83623409 但是里面的360字体库已经停运http://w ...

  4. cookie记录横向滚动条位置

    一.Css <style type="text/css"> #x{ width: 100%; white-space: nowrap; overflow-x: scro ...

  5. Flask路由&视图

    1 路由  1.1app.url_map 查看所有路由 from flask import Flask app = Flask(__name__) @app.route('/') def hello_ ...

  6. arm寄存器

    ARM 处理器拥有 37 个寄存器. 这些寄存器按部分重叠组方式加以排列. 每个处理器模式都有一个不同的寄存器组. 编组的寄存器为处理处理器异常和特权操作提供了快速的上下文切换. 提供了下列寄存器:三 ...

  7. 设计模式 — 抽象工厂模式(Abstract Factory)

    工厂模式已经分析了简单工厂模式和工厂方法模式.并且了解了工厂方法模式去简单工厂模式的延伸,工厂方法模式如果不把工厂类抽象的话,就是简单工厂模式.由前面两个工厂模式可以猜测出抽象工厂模式应该是这两种工厂 ...

  8. adjustsFontSizeToFitWidth 与 NSLineBreakByCharWrapping 无法共用

    newLabel.lineBreakMode = NSLineBreakByCharWrapping; newLabel.text = content; newLabel.adjustsFontSiz ...

  9. kettle的job定时任务的一个小问题

    思考,启动此job,做一个最简单,job实现表输入和表输出,但是实现表输入和表输出要花2个小时.那么这个job定时是如何执行的呢???第一种情况.job定时60分钟即1个小时.当job执行结束(即用了 ...

  10. ansible的tags

    执行ansible-playbook时可以使用--tags "tag1,tag2..." 或者 --skip-tags "tag1,tag2..."指定执行的t ...