py课后作业25,顺时针旋转矩阵中的所有元素
各位鱼油大家晚上好{:10_332:}做了一下25课的顺时针旋转矩阵中所有元素,然后想转换一下搞个按照逆时针旋转,然而转来转去被搞懵逼了{:10_255:}
不过还做出来了嘻嘻。
请各位帮忙看一下做对没有?思路是否正确?有没有简且好的方案?
顺便也做一下笔记{:10_278:}
matrix = [,
,
]
##########解析##########
#初始化矩阵的四个方向:顶部(top), 底部(low):表示行的长度 , 左边(left) , 右边(right):表示列的长度
#因为是逆时针旋转所以:-->-->-->-->-->
#有共同面就只需重复执行那一行即可
#<1>,从上到下遍历:(top,low+1) ----> (low,left)
#<2>,从左到右遍历:(left+1,low) ---> (low,right+1) **********
#<3>,从下到上遍历:(low-1,right) ---> (top-1,right) *********
#<4>,从有到左遍历:(top,right-1) ---> (left,top)
#经过一轮的遍历,那么相当于走了外层一圈,也就是 left+1、right-1、top+1、low-1
###每前进一层 left 就加 1,right 就减 1,top 和 low 也是一样,那么无论这个二维列表有多大,都会遇到一个矛盾点,那就是 left 终究会大于 right,top 终究会大于 low这个就是结束的条件啦!
#与矩阵数据关联
#获取矩阵 行 的长度赋值给x
#获取矩阵 列 的长度赋值给y
x = len(matrix)
y = len(matrix)
left = 0#左面
right = y - 1#右面, 表示列
top = 0 #顶部
low = x - 1 #底部, 表示行
record = []#存储数据
while left <= right and top <= low:
#从下到上遍历
for col in range(top,low+1):
record.append(matrix)
#从左到右遍历
for row in range(left+1,right+1):
record.append(matrix)
if left < right and top < low:
#从下到上遍历
for col in range(low-1 ,top-1,-1):
record.append(matrix)
#从右到左遍历
for row in range(right-1,left,-1):
record.append(matrix)
#最后一行元素 判断是否退出程序
left += 1
right -= 1
top += 1
low -= 1
print(record) 我觉得挺好的了。没看到啥多余的地方{:10_281:} 我觉得很好,我的思路也一样,边界一直往内缩小就是题解 对于n维矩阵的平移缩放和旋转只需要升维到n+1维 运算量能略微减小而且更适合显卡运算
https://blog.csdn.net/qq_23030843/article/details/81064881
b=[ for row in matrix] for i in range(-1,-5,-1)] kogawananari 发表于 2022-1-7 11:14
对于n维矩阵的平移缩放和旋转只需要升维到n+1维 运算量能略微减小而且更适合显卡运算
https://blog.csdn ...
原来如此,但是等等.......这个链接的内容也太硬了吧,暂时啃不动{:10_263:}
不过还是涨知识了{:10_330:} 傻眼貓咪 发表于 2022-1-7 10:53
我觉得很好,我的思路也一样,边界一直往内缩小就是题解
好的,谢谢{:10_288:}
页:
[1]