数组与哈希中等2 种解法
#48旋转图像
把 n×n 矩阵顺时针旋转 90 度,推荐原地完成。
#数组#矩阵#原地修改
解题主线
01
坐标 (row, column) 旋转后变为 (column, n-1-row)。
02
先沿主对角线转置,再逐行反转,等价于顺时针旋转。
解法 1:四点原地轮换
遍历左上区域,每次循环移动同一旋转轨道上的四个元素。
时间复杂度
O(n²)
空间复杂度
O(1)
java
final class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
for (int row = 0; row < n / 2; row++) {
for (int column = 0; column < (n + 1) / 2; column++) {
int temporary = matrix[row][column];
matrix[row][column] = matrix[n - 1 - column][row];
matrix[n - 1 - column][row] = matrix[n - 1 - row][n - 1 - column];
matrix[n - 1 - row][n - 1 - column] = matrix[column][n - 1 - row];
matrix[column][n - 1 - row] = temporary;
}
}
}
}遍历左上区域,每次循环移动同一旋转轨道上的四个元素。
解法 2:辅助矩阵坐标映射
把每个原元素写入旋转后的坐标,再整体复制回输入矩阵。
时间复杂度
O(n²)
空间复杂度
O(n²)
java
final class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int[][] rotated = new int[n][n];
for (int row = 0; row < n; row++) {
for (int column = 0; column < n; column++) {
rotated[column][n - 1 - row] = matrix[row][column];
}
}
for (int row = 0; row < n; row++) {
System.arraycopy(rotated[row], 0, matrix[row], 0, n);
}
}
}把每个原元素写入旋转后的坐标,再整体复制回输入矩阵。
- 保留旧文件中真实不同的辅助空间方案,但面试时优先原地解法。
边界与易错点
- 直接四点轮换时行列下标很容易写反。
- 辅助矩阵方案正确但不是题目要求的严格原地算法。
整理来源
由旧仓库源码复核、去重并整理;展示代码已按 Java 21 语义修正明显问题。
medium/Q048_rotate.java