Java 中矩阵的就地转置

Inplace transpose of a matrix in Java

我正在尝试使用简单的直觉来就地转置矩阵。

我正在尝试交换 matrix[i][j]matrix[j][i] 的元素,但它不起作用,我想知道幕后发生了什么。

class Solution {
    public int[][] transpose(int[][] matrix) {
        
        
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix[0].length; j++){
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
        
        return matrix;
    }
}

输出

对于矩阵 -> [[1,2,3],[4,5,6],[7,8,9]]

它给出输出 -> [[1,2,3],[4,5,6],[7,8,9]]

但预期的输出应该是 -> [[1,4,7],[2,5,8],[3,6,9]]

您将每对元素转置两次,从而使它们恢复原状。

一种解决方案是将内部循环中的 for(int j = 0; 更改为 for(int j = i + 1;。这将确保每对元素仅转置一次。

另请注意,此通用解决方案仅适用于方阵。

这样怎么样?

public int[][] transpose(int[][] matrix) {
    int[][] result = new int[matrix.length][matrix[0].length];
    for(int i = 0; i < matrix[0].length; i++){
        for(int j = 0; j < matrix.length; j++){
            result[j][i] = matrix[i][j];
            System.out.println(Arrays.deepToString(result));
        }
    }

    return result;
}