《Leetcode of December》48、旋转图像

在这里插入图片描述

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """

        #非原地操作
        n = len(matrix)
        # Python 这里不能 matrix_new = matrix 或 matrix_new = matrix[:] 因为是引用拷贝
        matrix_new = [[0] * n for _ in range(n)]
        for i in range(n):
            for j in range(n):
                matrix_new[j][n - i - 1] = matrix[i][j]
        # 不能写成 matrix = matrix_new
        matrix[:] = matrix_new

        #原地操作
        #1、先反转
        #2、按照对角线对称
        row,col = len(matrix),len(matrix[0])
        matrix.reverse()
        
        for i in range(row):
            for j in range(i+1):
                if i!=j:
                    matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j]


  • 第一种解法是非原地,声明一个与原数组相同大小的数组,然后找到翻转之后和之前的关系,并将填充后的数组赋值给原数组的引用
  • 第二种方法是原地解法:先将行进行翻转,然后再将对角线进行翻转

总结:还是比较简单的一个旋转问题,但是解题还是太慢了。

猜你喜欢

转载自blog.csdn.net/weixin_37724529/article/details/111402960