一、螺旋矩阵
螺旋矩阵是一个古老的玩具算法,实现螺旋的一种有趣的方法是填充顶部行并旋转矩阵来展开序列。
幸运的是,旋转和对称有着密切的关系,任何一个旋转能用点线对称或用两条线对称来表述,这正是我们想要的情况,我们所需要做的就是水平翻转矩阵和转置
二、Python算法实现
from itertools import count
def spiral(n):
matrix = [range(i * n + n)[-n:] for i in range(n)]
X, C, R = {}, count(1), matrix
while R:
X.update(zip(R[0], C))
R = list(zip(*[i[::-1] for i in R[1:]]))
return [[X[j] for j in i] for i in matrix]
for i in spiral(5):
print('\t'.join(map(str, i)))
- update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中
- zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。在Python3中如需展示列表,需手动用list()转换
输出结果:
三、作者Info
Author:小鸿的摸鱼日常,Goal:让编程更有趣!
专注于算法、爬虫,游戏开发,数据分析、自然语言处理,AI等,期待你的关注,让我们一起成长、一起Coding!
版权说明:本文禁止抄袭、转载,侵权必究!