zoukankan      html  css  js  c++  java
  • 牛客网每日一练

    #
    # 
    # @param matrix int整型二维数组 
    # @return void
    #
    class Solution:
        def rotate(self , matrix ):
            count = len(matrix)
            if count == 1:
                return matrix
            
            for i in range(count):
                for j in range(i , count):
                    matrix[j][i],matrix[i][j]=matrix[i][j],matrix[j][i]
            for i in range(count):
                matrix[i] = matrix[i][::-1]
            return matrix
            # write code here
    给出一个用二维矩阵表示的图像
    返回该图像顺时针旋转90度的结果
    扩展:
    你能使用原地算法解决这个问题么
     
    题解:首先,我们先来了解一下什么是原地算法。很简单的说就是不用考虑超出的空间,然后去覆盖。
    此题是一个非常典型的数组题
      

    这一问题可以有如下问法(都是空间复杂度为常数级别):

    1. 矩阵左旋/右旋90度
    2. 矩阵左旋/右旋180度

    对于本题,有两种思路:

      思路一:利用对称进行旋转——先根据主对角线互换元素,再根据垂直中线互换元素(推荐使用这种方法)

        

      如果旋转的是90°那么先根据主对角线互换元素,再根据垂直中线互换元素,如果是180°,那么进行两次对角线互换元素即可

       思路二:利用坐标映射(不推荐)

        

       举一反三:面对旋转、填充一类的题型,一定要考虑对称这一“大杀器”,它能极大的减少工作量,提高解题正确率和解题效率

  • 相关阅读:
    桥接,NAT,Host Only的区别
    PHP并发IO编程之路
    Git SSH Key 生成步骤
    composer安装学习
    db file sequential read等待事件的一点研究
    多个hints 怎么写?
    再次遭遇笛卡尔积
    pl/sql 在一个程序块里打印日志输出到表格
    pl/sql 程序块里打印问题
    利用ordered hints优化SQL
  • 原文地址:https://www.cnblogs.com/nenu/p/14643598.html
Copyright © 2011-2022 走看看