顺时针旋转90度需先转置再水平翻转:1. 转置即交换matrixi与matrixj(i从0到n−1,j从i到n−1);2. 每行用双指针左右翻转。时间o(n²),空间o(1)。

核心思路:转置 + 水平翻转
二维数组顺时针旋转 90 度,本质是两步操作:先沿主对角线做转置(swap matrix[i][j] ↔ matrix[j][i]),再对每一行做左右翻转(reverse each row)。这个方法原地完成,空间复杂度 O(1),时间复杂度 O(n²),适用于 n×n 方阵。
具体步骤(以 4×4 为例)
- 转置操作:遍历上三角(含对角线),交换 matrix[i][j] 和 matrix[j][i],即 i 从 0 到 n−1,j 从 i 到 n−1
- 水平翻转:对每行 i,用双指针 left=0、right=n−1,交换 matrix[i][left] 和 matrix[i][right],然后 left++、right--,直到 left ≥ right
Java 实现代码(原地旋转)
<font color="#0066cc">public</font> <font color="#0066cc">static</font> <font color="#0066cc">void</font> rotate(<font color="#0066cc">int</font>[][] matrix) {
<font color="#0066cc">int</font> n = matrix.length;
<font color="#888">// 步骤1:转置</font><font color="#0066cc">for</font> (<font color="#0066cc">int</font> i = <font color="#0066cc">0</font>; i for (<font color="#0066cc">int</font> j = i; j int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
<font color="#888">// 步骤2:每行翻转</font><font color="#0066cc">for</font> (<font color="#0066cc">int</font> i = <font color="#0066cc">0</font>; i int left = <font color="#0066cc">0</font>, right = n - <font color="#0066cc">1</font>;
<font color="#0066cc">while</font> (left int temp = matrix[i][left];
matrix[i][left] = matrix[i][right];
matrix[i][right] = temp;
left++;
right--;
}
}
}
注意事项与扩展
- 该算法仅适用于方阵(n×n)。若为 m×n 矩形矩阵,需新建 (n×m) 结果数组,按规律赋值:res[j][n-1-i] = matrix[i][j]
- 逆时针 90 度可改为“转置 + 垂直翻转(每列上下翻)”或执行三次顺时针旋转
- 调试时建议打印中间结果(如转置后),便于验证逻辑是否正确
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











