LeetCode刷题——旋转图片

这篇博客探讨了LeetCode中关于旋转矩阵的算法题目,详细解释了通过两层循环实现矩阵顺时针旋转90度的思路,包括元素移动的逻辑和代码实现。博主分享了自己的解决方案,并表示期待更优解。
摘要由CSDN通过智能技术生成

旋转图片题目的思路探讨与源码
旋转图片的题目如下图,核心是把一个矩阵进行顺时针90度的旋转,并且只能在当前矩阵上改动,不能新建矩阵,所以只需要把该矩阵旋转问题看作是矩阵内的数字移动的步骤即可。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本人在看到该题目后,旋转图片其实就是将不同位置的元素进行移动,比如矩阵的四个角上的元素,分别顺时针顺序移动,即完成了四个元素的移动。即在每一次的移动中,会有四个元素按顺时针进行移动。如下所示:
在这里插入图片描述
所以我们会用两层循环将矩阵进行旋转,每次选择都需要移动四个元素,直到所有元素都被移动为止。

#喷火龙与水箭龟
matrix=[[1,2,3],[4,5,6],[7,8,9]]
print(matrix)
nLen=len(matrix)
tmp1=0
for iu in range(nLen):
	ju=iu
	while(ju<nLen-iu-1):
		tmp1=matrix[iu][ju]
		matrix[iu][ju] = matrix[nLen-1-ju][iu]
		matrix[nLen-1-ju][iu] = matrix[nLen-1-iu][nLen-1-ju]
		matrix[nLen-1-iu][nLen-1-ju] = matrix[ju][nLen-1-iu]
		matrix[ju][nLen-1-iu] = tmp1
		ju=ju+1
print(matrix)

在上述代码中,iu和ju是两个移动的下标,iu代表行下标、ju代表列下标。行下标从0开始,到行末尾结束。列下标从iu的行下标开始,到nLen-1-iu结束,这种做法是类似半个矩阵的游走,因为一次移动四个元素,所以一个4*4的矩阵只需要移动4次即可。我们在这里把tmp1设为中间值,每次移动时,按顺序把第一个值赋予tmp1,第二个值赋给第一个值、第三个值赋给第二个值、第四个值赋给第三个值、tmp1赋给第四个值。
最终输入是 [[1, 2, 3], [4, 5, 6], [7, 8, 9]],得到结果[[7, 4, 1], [8, 5, 2], [9, 6, 3]] ,是正确的。需要注意的是,本代码是作者的测试代码,如需放到LeetCode上运行,需要进行函数缩进和略微修改才可以run。
最终结果如下:
在这里插入图片描述
从结果来说,本人的思路还不是最优的,应该还有效率更快的代码,希望朋友们能够多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值