832. 翻转图像
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。
反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。
示例 1:
1 | 输入:[[1,1,0],[1,0,1],[0,0,0]] |
示例 2:
1 | 输入:[[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]] |
提示:
1 <= A.length = A[0].length <= 200 <= A[i][j] <= 1
方法一:双指针
对于每一行元素,我们使用 left 和 right 指针来对该行元素进行水平翻转和反转操作。
| left | right | 处理后left | 处理后right | |
|---|---|---|---|---|
| ① | 0 | 0 | 1 | 1 |
| ② | 0 | 1 | 0 | 1 |
| ③ | 1 | 0 | 1 | 0 |
| ④ | 1 | 1 | 0 | 0 |
我们可以发现,当 left 和 right 指向的值相等时时,元素才需要变化,只用用该元素与 1 异或。
1 | class Solution { |
- 时间复杂度O(n^2)
- 空间复杂度O(1)