Java二维数组矩阵旋转核心是坐标映射:顺时针90°时,n×n方阵中matrixi→matrixj;矩形m×n则转为n×m,赋值rotatedj;逆时针90°可用上下翻转加转置,180°等价中心对称。

Java 中二维数组实现矩阵旋转,核心是理解旋转的数学规律,再用数组索引变换完成。最常见的是顺时针旋转 90°,它不依赖额外库,纯靠坐标映射即可高效完成。
顺时针旋转 90° 的索引映射
对于一个 n × n 的方阵,原数组 matrix[i][j] 旋转后会落在新位置 matrix[j][n-1-i]。更直观的理解是:
把原矩阵按层处理,每层四边元素循环移动;或直接构造新数组,按行从下到上、按列从左到右填充。
- 原第 0 行 → 变成最后一列(新数组第 0 行对应新第 n−1 列)
- 原第 i 行第 j 列 → 新数组第 j 行第 (n−1−i) 列
- 若需原地旋转(不新建数组),需分层+4个角交换,避免覆盖
非方阵(m × n)的旋转处理
矩形矩阵旋转后维度会互换:m 行 n 列 → n 行 m 列。不能原地完成,必须创建新数组。
- 新数组大小为
new int[n][m] - 遍历原数组:对每个
matrix[i][j],赋值给rotated[j][m-1-i](顺时针 90°) - 例如原数组
[[1,2,3],[4,5,6]](2×3)→ 旋转后为[[4,1],[5,2],[6,3]](3×2)
逆时针旋转 90° 和 180° 的快捷方式
不必重推公式,可组合基础操作:
- 逆时针 90° = 先上下翻转,再转置;或直接映射为
rotated[n-1-j][i] - 旋转 180° = 先水平翻转,再垂直翻转;或直接用
matrix[n-1-i][n-1-j] - 顺时针 180° 和逆时针 180° 结果相同,等价于中心对称
代码片段示例(顺时针 90°,支持矩形)
以下为简洁可运行的实现:
立即学习“Java免费学习笔记(深入)”;
public static int[][] rotate90Clockwise(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return matrix;
int m = matrix.length, n = matrix[0].length;
int[][] rotated = new int[n][m];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
rotated[j][m - 1 - i] = matrix[i][j];
}
}
return rotated;
}注意:该方法返回新数组,原数组不受影响;如需修改原数组,请确保引用已更新。


















