Brute force技术在应用于2D阵列时会返回一些胡言乱语



我试图用蛮力解决一个2D数组问题,但当我在IDE中运行代码时,它会返回一些我无法解码的胡言乱语。

问题:https://leetcode.com/problems/flipping-an-image/

import java.util.*;
import java.io.*;
public class flippingAnImage {
public static void main(String[] args){
int[][] arr = {{1,1,0},{1,0,1},{0,0,0}};
System.out.println(Arrays.toString(flip(arr)));
}
public static int[][] flip(int[][] image){
for(int i = 0 ; i < image.length ; i++){
for(int j = image[i].length-1,k=0 ; j>=0 && k < image[i].length;j--,k++){
image[i][k] = image[i][j];
}
}
return image;
}
}

这就是它的回报:[[I@5acf9800,[I@4617c264,[I@36baf30c]

任何帮助都将在这里感谢

toString()接受一维数组作为输入参数,并返回其字符串表示形式。它不适用于多维数组。只需将多维数组的toString替换为deepToString()即可。

比如

import java.util.Arrays;
public class ArrayFlipper {
public static void main(String[] args){
int[][] arr = {{1,1,0},{1,0,1},{0,0,0}};
System.out.println(Arrays.deepToString(flip(arr)));
}
public static int[][] flip(int[][] image){
for(int i = 0 ; i < image.length ; i++){
for(int j = image[i].length-1,k=0 ; j>=0 && k < image[i].length;j--,k++){
image[i][k] = image[i][j];
}
}
return image;
}
}

这将返回输出:

[[0, 1, 0], [1, 0, 1], [0, 0, 0]]

如果您的代码仍然没有给出预期的输出,请思考为什么要打印当前结果。

因为arr是一个二维数组。您打印的是关于arr的行的地址。(正如user16320675所提到的,这里的行地址不正确,应该是行的哈希代码(在java API中(https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)在这里你可以发现没有toString(int[][] a)而是toString(int[] a)。您的代码可以修改以获得值。

for (int i = 0; i < arr.length; i++) {
System.out.println(Arrays.toString(arr[i]));
}

但为什么不是leetcode中的答案。你的算法只是翻转而不是翻转。所以你应该多考虑一下你设计的算法。

最新更新