【力扣日记】048 旋转图像

题目描述:

给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image

算法思路:

在不修改源列表内存地址的情况下可以如此:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n=len(matrix)
        new,l=[],[]
        for i in range(n-1,-1,-1):
            for j in range(n-1,-1,-1):
                l.append(matrix[j][i])
            new.insert(0,l[:])
            l.clear()
        matrix[:]=new

执行用时 :36 ms, 在所有 python3 提交中击败了99.64%的用户

但这样使用了额外的数组,其实不满足题意。

———————————————————————————————————
评论区看到高人的方法,先上下翻转,再沿对角线翻转即可。

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        matrix[:]=matrix[::-1]
        for i in range(len(matrix)):
            for j in range(len(matrix)):
                if i>j:
                    matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]

执行用时 :44 ms, 在所有 python3 提交中击败了90.33%的用户

发布了70 篇原创文章 · 获赞 15 · 访问量 4326

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/103303514