Leetcode - 832 Flipping an Image (Easy)
题目描述:给定一个二维数组,先翻转每一行,例如 [1,0,0] 翻转后变为 [0,0,1];之后再倒置每一个元素,1 变为 0,0 变为 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]]
解题思路:本题分为翻转与倒置两个步骤,但是可以将两个步骤一起分析,每一行先翻转,再倒置,如果待翻转的两个元素不同的话,翻转倒置后保持不变,例如 [1,0,0] 翻转后变为 [0,0,1],再倒置变为 [1,0,0];如果待翻转的两个元素相同,翻转倒置后元素仅为倒置后的结果,例如 [1,0,1] 翻转保持不变,倒置为 [0,1,0]。倒置可以使用异或 ^1 实现。
public int[][] flipAndInvertImage(int[][] A
) {
int n
= A
[0].length
;
for (int[] row
: A
) {
for (int i
= 0 ; 2 * i
< n
; i
++) {
if (row
[i
] == row
[n
- i
- 1]) {
row
[i
] = row
[n
- i
- 1] ^= 1;
}
}
}
return A
;
}