杨辉三角

杨辉三角的性质:每个数等于它上方两数之和

  1. 思路:
    根据上述杨辉三角性质,新的行,是根据上一行的值两两相加得来, 为了便于取值我们在计算下一行时可以为上一行补0,如下
     1                     0 1 0
    1 1                   0 1 1 0
   1 2 1        -->      0 1 2 1 0
  1 3 3 1               0 1 3 3 1 0
 1 4 6 4 1             0 1 4 6 4 1 0

例如当我们计算第三行时:

     1
  0 1 1 0
   1 2 1

于是,代码逻辑就比较简单了:

def triangles():
    N = [1]
    while True:
        yield N
        tmp = [0] + N + [0]
        N = [tmp[i] + tmp[i+1] for i in range(0, len(tmp)-1)]
  1. 进阶:
    此时已经搞清楚了计算思路,可以再搞搞上层建筑(优化)了_
    借助zip函数,可以很轻易的将相加的两个数放到一起,比如:
L = [1, 1]
# 左补0
LL = [0, 1, 1]
# 右补0
RL = [1, 1, 0]

zip(LL, Rl)    -> [(0, 1), (1, 1), (1, 0)]
# 对比左右补0 [0, 1, 1, 0]

代码可优化为:

def triangles():
    N = [1]
    while True:
        yield N
        N = [sum(i) for i in zip([0] + N, N + [0])]
编辑于 2018-11-24
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容