难度简单
给定一个二进制矩阵 A
,我们想先水平翻转图像,然后反转图像并返回结果。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0]
的结果是 [0, 1, 1]
。
反转图片的意思是图片中的 0
全部被 1
替换, 1
全部被 0
替换。例如,反转 [0, 1, 1]
的结果是 [1, 0, 0]
。
思路:
水平翻转:每行前一半的数据对应的后一半数据进行位置交换即可;
反转:1->0,0->1, 满足的操作有:和1 进行异或,用1减去当前值。
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
int len_x=A.size(),len_y=A[0].size();
for(int i=0;i<len_x;++i){
for(int j=0;j<len_y/2;++j){
A[i][j]^=1;
A[i][len_y-j-1]^=1;
swap(A[i][j],A[i][len_y-j-1]);
}
if(len_y%2) A[i][len_y/2]^=1; // 异或操作
}
return A;
}