LeetCode第48题:旋转图像

该博客详细介绍了如何通过两步操作实现二维数组(矩阵)的旋转。首先,通过交换对角线上的元素来完成第一轮旋转,然后以中间行(或列)为界,交换对应行的元素以完成第二轮旋转。提供的代码示例清晰地展示了这一过程,适用于对数组操作和算法理解的学习。
摘要由CSDN通过智能技术生成

题目:
在这里插入图片描述
在这里插入图片描述
思路:
对于这道题我的想法是分两步进行旋转

首先,调换数组的正对角线元素
调换前

[
	[1,2,3],
	[4,5,6],
	[7,8,9]
]

调换之后:

[
	[9,6,3],
	[8,5,2],
	[7,4,1]
]

第一步的的方法是:设n=len(matrix),对于两个对角线元素(x1,y1),(x2,y2),有x1+y2=n-1; x2+y1=n-1
因此利用这一点,交换对角线元素,为第二步交换做准备

第二步:
交换对应行的所有元素
取(n+1)/2作为边界(防止交换完之后又换回来了),列不动,将行按照i=n-1-i的规律进行交换,如下所示

交换前:

[
	[9,6,3],
	[8,5,2],
	[7,4,1]
]

交换后:

[
	[7,4,1],
	[8,5,2],
	[9,6,3]
]

代码如下:

class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        """
        n = len(matrix)
        # 调换所有对角元素
        for i in range(n):
            for j in range(n-i):
                matrix[i][j], matrix[n-1-j][n-1-i] = matrix[n-1-j][n-1-i], matrix[i][j]

        # 翻转矩阵,调换每一行
        for j in range(n):
            for i in range(int((n+1)/2)):
                matrix[i][j], matrix[n-1-i][j] = matrix[n-1-i][j], matrix[i][j]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值