Description:
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
题意:给定一个矩阵,将矩阵每一行的元素逆序并且将1翻转为0,将0翻转为1;
解法:我们可以遍历矩阵的行元素,将其首尾相互交换后翻转,这样只需要遍历矩阵的一半就可以完成逆序和翻转了;
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
if (A == null) {
return A;
} //matrix is null
for(int i=0; i<A.length; i++) {
int st = 0;
int ed = A[i].length - 1;
while(st < ed) {
//exchange
A[i][st] = A[i][st] ^ A[i][ed];
A[i][ed] = A[i][st] ^ A[i][ed];
A[i][st] = A[i][st] ^ A[i][ed];
//invert
A[i][st] = A[i][st] == 1 ? 0 : 1;
A[i][ed] = A[i][ed] == 1 ? 0 : 1;
st++;
ed--;
}
//the number of row elements is odd
if (st == ed) {
A[i][st] = A[i][st] == 1 ? 0 : 1;
}
}
return A;
}
}