首页 > 解决方案 > 如何编写反转二维数组的方法

问题描述

我有这个问题要解决

编写一个方法,将整数类型的二维数组作为参数并返回数组的倒数(行变为列,反之亦然)。

这就是我通过搜索所做的,但它显示了一堆错误

public static class inverse{

    public static int[][] arrayInverse(int[][] A){
        int[][] B = new int[3][3];
        for(int i=0; i<B.length/2;i++){
            for (int j=0; j<B[i].length/2;j++) {
                int swap = B[i][j];
                B[B.length - i - 1] = swap;
            }
        }
        return swap;
    }
}

}

标签: java

解决方案


首先,正如评论中提到的,任务是将输入数组行变成列,反之亦然

如果输入二维数组是正方形(行数与列数相同),最有效的方法是交换主对角线下方和上方的元素:a[i][j] ⇄ a[j][i]不使用额外的数组:

public static int[][] transposeSquare(int[][] arr) {
    for (int i = 0, n = arr.length; i < n; i++) {
        // select the elements only above the main diagonal
        for (int j = i + 1, m = arr[i].length; j < m; j++) {
            int tmp = arr[i][j];
            arr[i][j] = arr[j][i];
            arr[j][i] = tmp;
        }
    }
    return arr;
}

但是,在矩形矩阵的一般情况下,可能需要创建一个新的大小数组/矩阵M x N而不是N x M,并以适当的顺序从输入中复制值(然后不需要交换):

public static int[][] transpose(int[][] arr) {
    int[][] result = new int[arr[0].length][arr.length];
    for (int i = 0, n = arr.length; i < n; i++) {
        for (int j = 0, m = arr[i].length; j < m; j++) {
            result[j][i] = arr[i][j];
        }
    }
    return result;
}

推荐阅读