【Leetcode刷题】q48-旋转图像(原地旋转矩阵)

本文介绍了一种在LeetCode上解决矩阵旋转问题的方法。通过坐标计算映射矩阵元素的位置变化,并提出了一种优化的空间利用方案,即将原本需要的三个临时变量减少为两个。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

在这里插入图片描述
本题具体要求见Leetcode-q48

解题思路

这道题的主要做法就是坐标计算,计算哪个点会被映射到哪个位置,然后根据位置来进行变量的变化。

推算坐标关系的时候,千万不要用最外圈算,特别容易忽略start=0这个事实,一定要用里面的圈来算。

另外,这道题还可以进一步提升空间利用率,那就是把三个tmp合成两个。

代码

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        numLoop = n // 2
        
        for line_start in range(numLoop):
            line_end = n - line_start - 1
            
            for i in range(line_start, line_end):
                tmp_upRight = matrix[i][line_end]
                tmp_downRight = matrix[line_end][line_end - i + line_start]
                tmp_downLeft = matrix[line_end - i + line_start][line_start]
                matrix[i][line_end] = matrix[line_start][i]
                matrix[line_end][line_end - i + line_start] = tmp_upRight
                matrix[line_end - i + line_start][line_start] = tmp_downRight
                matrix[line_start][i] = tmp_downLeft
        return
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值