How to swap rows and columns of a 2d array?

后端 未结 2 613
死守一世寂寞
死守一世寂寞 2021-01-23 03:54

I\'m trying to write a method for \'transpose\' a two-dimensional array of integers, in which the rows and columns of the original matrix are exchanged.

However, I have n

相关标签:
2条回答
  • 2021-01-23 04:33

    The transpose of a matrix

    int m = 4;
    int n = 5;
    
    // original matrix
    int[][] arr1 = {
            {11, 12, 13, 14, 15},
            {16, 17, 18, 19, 20},
            {21, 22, 23, 24, 25},
            {26, 27, 28, 29, 30}};
    
    // transposed matrix
    int[][] arr2 = new int[n][m];
    
    // swap rows and columns
    IntStream.range(0, n).forEach(i ->
            IntStream.range(0, m).forEach(j ->
                    arr2[i][j] = arr1[j][i]));
    

    // output to the markdown table
    String matrices = Stream.of(arr1, arr2)
            .map(arr -> Arrays.stream(arr).map(Arrays::toString)
                    .collect(Collectors.joining("<br>")))
            .collect(Collectors.joining("</pre> | <pre>"));
    
    System.out.println("| original matrix | transposed matrix |");
    System.out.println("|---|---|");
    System.out.println("| <pre>" + matrices + "</pre> |");
    
    original matrix transposed matrix
    [11, 12, 13, 14, 15]
    [16, 17, 18, 19, 20]
    [21, 22, 23, 24, 25]
    [26, 27, 28, 29, 30]
    [11, 16, 21, 26]
    [12, 17, 22, 27]
    [13, 18, 23, 28]
    [14, 19, 24, 29]
    [15, 20, 25, 30]

    See also: Printing a snake pattern using an array

    0 讨论(0)
  • 2021-01-23 04:38

    You could iterate over the rows and columns and assign each element [i,j] to the transposed [j,i]:

    /**
     * Transposses a matrix.
     * Assumption: mat is a non-empty matrix. i.e.:
     * 1. mat != null
     * 2. mat.length > 0
     * 3. For every i, mat[i].length are equal and mat[i].length > 0
     */
    public static int[][] transpose(int[][] mat) {
        int[][] result = new int[mat[0].length][mat.length];
        for (int i = 0; i < mat.length; ++i) {
            for (int j = 0; j < mat[0].length; ++j) {
                result[j][i] = mat[i][j];
            }
        }
        return result;
    }
    
    0 讨论(0)
提交回复
热议问题