4、翻转图像
2018-10-25 本文已影响10人
ZeroForSpider
1、题目如下
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。
反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。
示例 1:
输入: [[1,1,0],[1,0,1],[0,0,0]]
输出: [[1,0,0],[0,1,0],[1,1,1]]
解释: 首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]];
然后反转图片: [[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]]
解释: 首先翻转每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]];
然后反转图片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
说明:
1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1
2、解题思路:
对输入的矩阵要进行两种翻转,一种是水平翻转,即反序排列当前行。另一种是反转图片。即当前元素若为0,则反转后为1,反之亦然。所以解题思路为:定义一个和输入矩阵大小一样的二维整型数组。顺序行逆序列遍历当前的输入矩阵并对当前元素取反后放入新的二维数组,最后返回这个二维数组即可。
3、代码如下:
class Solution {
public int[][] flipAndInvertImage(int[][] A) {
int row=A.length;
int col=A[0].length;
int [][] B=new int[row][col];
col--;
for(int i=0,m=0;i<row;i++,m++){
for(int j=col,n=0;j>=0;j--,n++){
if(A[i][j]==0){
B[m][n]=1;
}else{
B[m][n]=0;
}
}
}
return B;
}
}
public class MainClass {
public static int[] stringToIntegerArray(String input) {
input = input.trim();
input = input.substring(1, input.length() - 1);
if (input.length() == 0) {
return new int[0];
}
String[] parts = input.split(",");
int[] output = new int[parts.length];
for(int index = 0; index < parts.length; index++) {
String part = parts[index].trim();
output[index] = Integer.parseInt(part);
}
return output;
}
public static int[][] stringToInt2dArray(String input) {
JsonArray jsonArray = JsonArray.readFrom(input);
if (jsonArray.size() == 0) {
return new int[0][0];
}
int[][] arr = new int[jsonArray.size()][];
for (int i = 0; i < arr.length; i++) {
JsonArray cols = jsonArray.get(i).asArray();
arr[i] = stringToIntegerArray(cols.toString());
}
return arr;
}
public static String int2dArrayToString(int[][] array) {
if (array == null) {
return "null";
}
if (array.length == 0) {
return "[]";
}
StringBuilder sb = new StringBuilder("[");
for (int[] item : array) {
sb.append(Integer.toString(item));
sb.append(",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
int[][] A = stringToInt2dArray(line);
int[][] ret = new Solution().flipAndInvertImage(A);
String out = int2dArrayToString(ret);
System.out.print(out);
}
}
}
4、运行结果如下:
image.png