牛客网每日一练

#
# 
# @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°,那么进行两次对角线互换元素即可

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

    

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

原文地址:https://www.cnblogs.com/nenu/p/14643598.html