題目描述
給定一個二進制矩陣 A方援,我們想先水平翻轉(zhuǎn)圖像没炒,然后反轉(zhuǎn)圖像并返回結(jié)果。
水平翻轉(zhuǎn)圖片就是將圖片的每一行都進行翻轉(zhuǎn)犯戏,即逆序送火。例如,水平翻轉(zhuǎn) [1, 1, 0] 的結(jié)果是 [0, 1, 1]先匪。
反轉(zhuǎn)圖片的意思是圖片中的 0 全部被 1 替換种吸, 1 全部被 0 替換。例如呀非,反轉(zhuǎn) [0, 1, 1] 的結(jié)果是 [1, 0, 0]坚俗。
示例1
輸入:[[1,1,0],[1,0,1],[0,0,0]]
輸出:[[1,0,0],[0,1,0],[1,1,1]]
解釋:首先翻轉(zhuǎn)每一行: [[0,1,1],[1,0,1],[0,0,0]];
然后反轉(zhuǎn)圖片: [[1,0,0],[0,1,0],[1,1,1]]
示例2
輸入:[[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
輸出:[[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
解釋:首先翻轉(zhuǎn)每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]]姜钳;
然后反轉(zhuǎn)圖片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
個人解題思路
- 先做水平翻轉(zhuǎn)
- 再做圖片反轉(zhuǎn)
代碼
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
int length1=A.length;
int length2=A[0].length;
// 先做水平翻轉(zhuǎn)
for(int i=0;i<length1;i++){
for (int j=0;j<length2/2;j++){
int temp=A[i][length2-j-1];
A[i][length2 -j - 1] = A[i][j];
A[i][j] = temp;
}
}
// 再做反轉(zhuǎn)
for(int i=0;i<length1;i++){
for (int j=0;j<length2;j++){
A[i][j]=A[i][j]^1;
}
}
return A;
}
}
官網(wǎng)解題方法
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
int n = A.length;
for (int i = 0; i < n; i++) {
int left = 0, right = n - 1;
while (left < right) {
if (A[i][left] == A[i][right]) {
A[i][left] ^= 1;
A[i][right] ^= 1;
}
left++;
right--;
}
if (left == right) {
A[i][left] ^= 1;
}
}
return A;
}
}