蓝桥杯打卡Day4

目录

网站原题

分析解答


网站原题

力扣:48. 旋转图像

给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

提示:

n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000

分析解答

矩阵的转置最常用的方法是借助辅助矩阵暂存原矩阵各元素,再按转置后的位置索引重新填入各元素,相当于把一个盘子里不同颜色的巧克力豆倒在另一个空碗里,再按照重新排列的顺序放回原来的盘子中,两次转存操作的空间复杂度为O(N^2)。

这里借助append方法实现排序和暂存的功能,性能与辅助矩阵基本一致:

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

值得注意的是,题目反复提醒“原地修改”的用意,并不是指不允许构建新的矩阵,而是要求重复利用原始矩阵的存储空间,将对 matrix 的更改都反映在原始列表中。所以直接把转置后的矩阵复制给“matrix”是行不通的,因为这相当于更改了“matrix”指向的对象地址,而不是修改了原矩阵存储地址中的元素:

matrix = matrix[n:]

详细说来:

  1. matrix[:] = matrix[n:]:这行代码表示将 matrix[n:] 中的元素赋值给 matrix,但仍然保持了原始的内存引用,因此任何对 matrix 的更改都将反映在原始列表中。这是一种原地修改 matrix 的方式。

  2. matrix = matrix[n:]:这行代码表示创建了一个新的列表,其中包含了 matrix[n:] 中的元素,并将 matrix 变量重新指向了这个新列表。这将导致原始的 matrix 列表与新列表不再有关联,任何对 matrix 的更改都不会影响原始列表。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值