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;
}