题目
这一题是简单难道,主要考察两点
(1) 数组翻转
- 数组翻转可以使用取半(>>1)遍历
- 或者使用区间[left, right] 中 left + right == col - 1 这个性质进行翻转
(2) 0和1的翻转
由于异或(^)是无符号相加,即
1^1 = 0
1^0 = 1
代码如下:
public int[][] flipAndInvertImage(int[][] A) {
int row = A.length;
int col = A[0].length;
for (int i = 0; i < row; i++) {
int left = 0, right = col - 1 - left;
while (left <= right) {
// 异或 无符号相加
int tmp = A[i][left] ^ 1;
A[i][left] = A[i][right] ^ 1;
A[i][right] = tmp;
left++;
right--;
}
}
return A;
}