先逐行翻转,再全部0,1翻转,其实如果行翻转的时候,对应是不同的,经过下一步,就会恢复过来,不会改变,最后改变的只有在行翻转的时候对应位置是相同元素的时候,,所以只要找到行翻转时候,对应位置元素相同的进行0,1替换即可
方法1:
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
int n=A.length;
for(int i=0;i<n;i++){
int j=A[0].length;
int k=0;
//这个k*2<length 以后翻转数组用它
for(k=0;k*2<j;k++){
if(A[i][k]==A[i][j-k-1]){
A[i][k]=A[i][j-k-1]^=1;异或与1进行,就会使原来的1或者0取反。
}
}
return A;
}
}
方法2:
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
int n=A.length;
for(int i=0;i<n;i++){
int j=A[0].length-1;
int k=0;
//这个就是while去取首尾对应元素了
while(j>=k){
if(A[i][k]==A[i][j]){
// int temp=1-A[i][k];
// A[i][k]=A[i][j]=temp;
A[i][k]=A[i][j]^=1;//只能和1异或,才能改变原理的0和1。
}
j--;
k++;
}
}
return A;
}
}