Javaで追加のメモリを使用せずに行列を転置する方法


  1. 入力行列を2次元配列として表現します。
public static void transposeMatrix(int[][] matrix) {
    int rows = matrix.length;
    int columns = matrix[0].length;
    for (int i = 0; i < rows; i++) {
        for (int j = i + 1; j < columns; j++) {
            // 要素の値を交換します
            int temp = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    }
}

この方法では、入力行列自体を転置しています。行数と列数が異なる場合でも動作します。

  1. 入力行列を1次元配列として表現します。
public static void transposeMatrix(int[] matrix, int rows, int columns) {
    for (int i = 0; i < rows; i++) {
        for (int j = i + 1; j < columns; j++) {
            // 要素のインデックスを計算します
            int index1 = i * columns + j;
            int index2 = j * columns + i;
            // 要素の値を交換します
            int temp = matrix[index1];
            matrix[index1] = matrix[index2];
            matrix[index2] = temp;
        }
    }
}

この方法では、1次元配列を使用して行列を表現し、転置を行います。行列の要素数が非常に大きい場合や、メモリ使用量を最小限に抑えたい場合に有用です。