矩阵转置核心是行列索引互换,原matrixi变为transposedj;非方阵需交换维度,m×n转为n×m;需校验null、空数组及首行null;原地转置仅适用于方阵且需遍历上三角区域。

Java 中实现矩阵转置,核心是把原数组的行索引和列索引互换:原矩阵 matrix[i][j] 在转置后变成 transposed[j][i]。注意原矩阵不一定是方阵,所以新数组的行列尺寸要反过来——若原矩阵是 m × n,转置后就是 n × m。
创建新二维数组,按规则赋值
这是最常用、最清晰的方式。先根据原数组列数和行数声明新数组,再遍历原数组,把每个元素放到对应位置。
- 假设原数组为
int[][] matrix = {{1,2,3}, {4,5,6}};(2 行 3 列) - 转置后应为 3 行 2 列:
int[][] transposed = new int[matrix[0].length][matrix.length]; - 双层循环:外层遍历列(
j),内层遍历行(i),执行transposed[j][i] = matrix[i][j];
处理空或不规则数组(健壮性检查)
实际开发中需预防 null 或空行。建议加简单校验:
- 先判断
matrix == null || matrix.length == 0,直接返回null或空数组 - 再检查首行是否为
null(matrix[0] == null),避免NullPointerException - 若允许“不规则”二维数组(各行长度不同),通常按最短行或报错处理;标准转置要求每行等长,否则逻辑无意义
原地转置仅适用于方阵,且较复杂
对于 n × n 方阵,理论上可不额外分配空间,通过交换上三角与下三角元素实现。但需注意:
立即学习“Java免费学习笔记(深入)”;
- 只遍历严格上三角区域(
i ),每次交换 <code>matrix[i][j]和matrix[j][i] - 非方阵无法原地转置,因为行列数不同,内存布局不匹配
- 日常开发推荐用新数组方式,代码简洁、不易出错、可读性强
完整可运行示例
以下是一个带校验的通用转置方法:
public static int[][] transpose(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0] == null) {
return new int[0][0];
}
int rows = matrix.length;
int cols = matrix[0].length;
int[][] result = new int[cols][rows];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
result[j][i] = matrix[i][j];
}
}
return result;
}
调用后,{{1,2,3},{4,5,6}} 将变为 {{1,4},{2,5},{3,6}}。


















