旋转图像
理解题目:
题目要求将一个 n x n 的二维矩阵顺时针旋转 90 度。
代码实现:
public class RotateImage {
// 旋转图像
public void rotate(int[][] matrix) {
int n = matrix.length;
// 先对矩阵进行转置
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
// 再对每一行进行反转
for (int i = 0; i < n; i++) {
int left = 0, right = n - 1;
while (left < right) {
int temp = matrix[i][left];
matrix[i][left] = matrix[i][right];
matrix[i][right] = temp;
left++;
right--;
}
}
}
}
步骤解释:
-
先对矩阵进行转置操作,即将矩阵的行与列进行交换,得到矩阵的转置。
-
对于转置后的矩阵,再对每一行进行反转操作,即将每一行的元素顺序反转。
-
最终得到的矩阵即为原矩阵顺时针旋转 90 度后的结果。
时间复杂度: 转置操作和反转操作都需要遍历矩阵的所有元素,因此时间复杂度为 O(n^2)。
空间复杂度: 只使用了常数级别的额外空间,空间复杂度为 O(1)。