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;
}
我正在尝试使用简单的直觉来就地转置矩阵。
我正在尝试交换 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;
}