矩阵转置是行列互换,m×n矩阵转置为n×m矩阵,新矩阵第i行第j列等于原矩阵第j行第i列;顺时针90°旋转需先转置再水平翻转;一般通过新建数组并按transposedj = matrixi赋值实现。

Java 中实现矩阵转置和旋转,核心在于理解索引变换规律,并正确创建新数组、填充元素。转置是行列互换,旋转(如顺时针90°)则需结合转置与翻转。
矩阵转置(行变列,列变行)
对于 m×n 矩阵,转置后为 n×m 矩阵,新矩阵第 i 行第 j 列 = 原矩阵第 j 行第 i 列。
- 先创建大小为 columns × rows 的新二维数组
- 用双重循环遍历原数组,按
transposed[j][i] = matrix[i][j]赋值 - 注意:原地转置仅适用于方阵,且实现复杂、易出错,一般不推荐
示例代码:
public static int[][] transpose(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return matrix;
int rows = matrix.length, cols = matrix[0].length;
int[][] transposed = new int[cols][rows];
for (int i = 0; i 顺时针旋转 90°(常见需求)
对 n×n 方阵,顺时针旋转 90° 等价于:先转置,再将每行左右翻转。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 第一步:按上述方法完成转置
- 第二步:对转置后的每行,交换第 j 列与第 (len−1−j) 列,j 从 0 到 len/2−1
- 若为非方阵(m×n),旋转后变为 n×m,逻辑仍适用,但需注意翻转的是「每行」而非「每列」
示例代码(方阵版):
public static void rotate90Clockwise(int[][] matrix) {
if (matrix == null || matrix.length == 0) return;
int n = matrix.length;
// 步骤1:转置
for (int i = 0; i 逆时针旋转 90° 或旋转 180°
可复用基础操作组合,避免重复造轮子:
- 逆时针 90° = 先转置 + 每列上下翻转(或等价于:每行翻转后再转置)
- 旋转 180° = 每行翻转后,再整体上下翻转;或直接:matrix[i][j] ↔ matrix[n−1−i][n−1−j]
- 若需返回新数组(不修改原矩阵),所有翻转操作都应在新数组上进行
注意事项与边界处理
实际使用中容易忽略这些细节:
- 空矩阵、单行/单列、null 引用必须判空,否则抛
NullPointerException或ArrayIndexOutOfBoundsException - Java 中二维数组不要求每行等长(即“锯齿数组”),做转置前建议校验是否为规则矩阵
- 旋转操作若在原数组上进行,务必确认是否允许修改原始数据;否则应先 deep copy
- 涉及 char、double 等类型时,只需替换对应类型声明,逻辑完全一致
不复杂但容易忽略细节,把索引映射关系理清,再辅以简单的循环控制,就能稳稳实现。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










