Skip to content

旋转图像

理解题目:

题目要求将一个 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--;
            }
        }
    }
}

步骤解释:

  1. 先对矩阵进行转置操作,即将矩阵的行与列进行交换,得到矩阵的转置。

  2. 对于转置后的矩阵,再对每一行进行反转操作,即将每一行的元素顺序反转。

  3. 最终得到的矩阵即为原矩阵顺时针旋转 90 度后的结果。

时间复杂度: 转置操作和反转操作都需要遍历矩阵的所有元素,因此时间复杂度为 O(n^2)

空间复杂度: 只使用了常数级别的额外空间,空间复杂度为 O(1)