zoukankan      html  css  js  c++  java
  • Leetcode题目48.旋转图像(中等)

    题目描述:

    给定一个 n × n 的二维矩阵表示一个图像。

    将图像顺时针旋转 90 度。

    说明:

    你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

    示例 1:
    
    给定 matrix = 
    [
    [1,2,3],
    [4,5,6],
    [7,8,9]
    ],
    
    原地旋转输入矩阵,使其变为:
    [
    [7,4,1],
    [8,5,2],
    [9,6,3]
    ]
    示例 2:
    
    给定 matrix =
    [
    [ 5, 1, 9,11],
    [ 2, 4, 8,10],
    [13, 3, 6, 7],
    [15,14,12,16]
    ],
    
    原地旋转输入矩阵,使其变为:
    [
    [15,13, 2, 5],
    [14, 3, 4, 1],
    [12, 6, 8, 9],
    [16, 7,10,11]
    ]

    思路解析:

    最直接的想法是先转置矩阵(即原矩阵的行变成新矩阵的列,原矩阵的行变成新矩阵的列,满足公式(AT)T=A),然后翻转每一行。这个简单的方法已经能达到最优的时间复杂度O(N^2)。

    代码实现:

    class Solution {
       public static void rotate(int[][] matrix) {
    
            //先求当前矩阵的转置矩阵
            int len = matrix.length;
            for (int i = 0; i < len; i++) {
                for (int j = i; j < len; j++) {
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[j][i];
                    matrix[j][i] = temp;
                }
            }
            //在根据每一行,以最中间的一列对称左右互换
            for (int i = 0; i < len; i++) {
                for (int j = 0; j < len / 2; j++) {
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[i][len - 1 - j];
                    matrix[i][len - 1 - j] = temp;
                }
            }
    
        }
    }

    时间复杂度:O(N^2)。

    空间复杂度:O(1)由于旋转操作是就地完成的。

  • 相关阅读:
    DDT驱动selenium自动化测试
    python 对Excel表格的读取
    python 对Excel表格的写入
    selenium对百度进行登录注销
    selenium的八大定位元素的方式
    selenium打开Chrome浏览器并最大化
    行列式计算的归纳
    C标准库函数getchar()
    测试必备-抓包工具的使用
    uiautomator2使用教程
  • 原文地址:https://www.cnblogs.com/ysw-go/p/11792821.html
Copyright © 2011-2022 走看看