【矩阵】48. 旋转图像【中等】

旋转图像

  • 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
  • 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。
  • 请不要 使用另一个矩阵来旋转图像。

示例 1:

在这里插入图片描述

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

解题思路

  • 1、首先,我们将矩阵沿着主对角线(左上到右下的对角线)进行镜像翻转,即将矩阵的行和列互换。
  • 2、然后,再将每一行按照中心水平轴进行翻转,即将每一行的元素顺序颠倒。

Java实现

public class RotateImage {
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        
        // Transpose the matrix 转换矩阵
        for (int i = 0; i < n; i++) {
            //注意,这里是j=i,只能遍历左上角到右下角一半的矩阵
            for (int j = i; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
        
        // Reverse each row 反转每一行
        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--;
            }
        }
    }

    public static void main(String[] args) {
        RotateImage rotateImage = new RotateImage();
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        int[][] test = {
                { 1,  2,  3,  4},
                { 5,  6,  7,  8},
                { 9, 10, 11, 12},
                {13, 14, 15, 16}
        };
        System.out.println("Original Matrix:");
        printMatrix(matrix);
        rotateImage.rotate(matrix);
        System.out.println("Rotated Matrix:");
        printMatrix(matrix);

        System.out.println("Original Matrix:");
        printMatrix(test);
        rotateImage.rotate(test);
        System.out.println("Rotated Matrix:");
        printMatrix(test);

    }
    
    private static void printMatrix(int[][] matrix) {
        for (int[] row : matrix) {
            for (int num : row) {
                System.out.print(num + " ");
            }
            System.out.println();
        }
    }
}

时间空间复杂度

  • 时间复杂度:O(n^2),其中 n 是矩阵的边长。
  • 空间复杂度:O(1),只需要使用常数级别的额外空间

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-15 14:46:03       17 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-15 14:46:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 14:46:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 14:46:03       18 阅读

热门阅读

  1. 基于SpringBoot+Druid实现多数据源:原生注解式

    2024-03-15 14:46:03       20 阅读
  2. spring boot单元测试

    2024-03-15 14:46:03       23 阅读
  3. kotlin 程序 编译与执行

    2024-03-15 14:46:03       22 阅读
  4. R语言系列2——R语言数据处理技巧

    2024-03-15 14:46:03       20 阅读
  5. MSQL中DATETIME或TIMESTAMP的区别

    2024-03-15 14:46:03       19 阅读
  6. QCOM和其他常见芯片平台术语缩写

    2024-03-15 14:46:03       18 阅读
  7. 牛客小白月赛61-C-小喵觅食

    2024-03-15 14:46:03       20 阅读
  8. C# MG.CamCtrl 工业相机库(开源) 海康 大恒

    2024-03-15 14:46:03       23 阅读
  9. nginx升级版本

    2024-03-15 14:46:03       21 阅读