LeetCode算法题832解题思路

原题

832. 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

解题思路

读完题后发现,嵌套循环是必须的了,躲不过去,因为要遍历每一个元素,才能改变他们的值。
所以我的基本思路是外层升序排,内存降序排, 引入中间变量存变换后的值。
然后在一轮循环里处理完翻转和0,1之间的互换。

偷窥了别人的解法之后,发现有可以改进的地方:
提示一下,内层循环可以借助二分法的思路,可以少掉一半的循环次数。也就不用引入中间变量,不用管升序还是降序了。

代码实现

Golang实现

https://github.com/cook-coder/my-leetcode-solution/tree/master/easy/832

成绩

加载评论框需要科学上网