48.旋转图像

89 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

48.旋转图像

  • 题号:力扣48
  • 知识点:矩阵
  • 总结 题干: 在这里插入图片描述 思路:
  • 1.看到题目第一个思路是按照59题:螺旋矩阵254题:螺旋矩阵类似的思路,把矩阵从最右上角的位置螺旋填入即可,但是题目中要求in-place,即不能使用新建矩阵的方式。题目的本意并不是让我们用这种方法。
  • 2.仔细观察矩阵变换前后的规律,其实是矩阵转置操作和逆序操作的结合。剩下的实现方法就比较简单了,但是要注意不能使用另一个矩阵
  • 3.第一步先实现矩阵的转置,按照定义a是b的转置,满足a[i][j] = b[j][i]
  • 4.这里转置实现的方式是交换对角线对称的两个元素matrix[i][j] = matrix[j][i],类似交换两数之值的方法,temp为临时变量
  • 5.转置之后再对第二维做逆序即可通过
class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        # 1.转置
        # 2.逆序
        l = len(matrix)
        temp = 0
        for i in range(0, l):
            for j in range(0, l):
                temp = int(matrix[i][j])
                matrix[i][j] = matrix[j][i]
                matrix[j][i] = temp
                if i == j:
                    break
        # [[1,4,7],[2,5,8],[3,6,9]]
        # 再逆序
        for i in range(0, l):
            matrix[i] = matrix[i][::-1]
        # [[7,4,1],[8,5,2],[9,6,3]]

参考: 题解中有人总结了类似题目的做法:

  • 顺时针旋转90:先沿对角线反转矩阵,再沿竖中轴线反转矩阵;
  • 顺时针旋转180:先沿横中轴线反转矩阵,再沿竖中轴线反转矩阵;
  • 顺时针旋转270:先沿对角线反转矩阵,再沿横中轴线反转矩阵;

链接