地址:
https://leetcode.com/problems/flipping-an-image/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
解法1:(自己的)
public static int[][] flipAndInvertImage1(int[][] A) {
int[][]temp=new int[A.length][];
for(int i=0;i
通过时间:8ms
解法2(别人的):
private static void flipAndInvertImage(int[][] a) {
int len=a[0].length;
for(int[] m:a){
for(int i=0;i<(len+1)/2;i++){
int temp=m[i]^1;
m[i]=m[len-1-i]^1;
m[len-1-i]=temp;
}
}
}
通过时间:4ms
大神的思路是,对半翻转,同时取反,取反的时候应用的是与1的异或,这样的话,如果为0则变为1,如果为1则变为0.
反思:这个题目是考察二维数组的操作,比如下标取值,对半翻转,还有位运算的异或取反等,可以作为单个的方法进行其他的运算。