LeetCode刷题——旋转图片

旋转图片题目的思路探讨与源码
旋转图片的题目如下图,核心是把一个矩阵进行顺时针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。
最终结果如下:
在这里插入图片描述
从结果来说,本人的思路还不是最优的,应该还有效率更快的代码,希望朋友们能够多多指教。

发布了29 篇原创文章 · 获赞 30 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_26727101/article/details/104374506
今日推荐