杨辉三角

杨辉三角的性质:每个数等于它上方两数之和
  1. 思路:
    根据上述杨辉三角性质,新的行,是根据上一行的值两两相加得来, 为了便于取值我们在计算下一行时可以为上一行补0,如下
10 1 0 1 10 1 1 0 1 2 1-->0 1 2 1 0 1 3 3 10 1 3 3 1 0 1 4 6 4 10 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

    推荐阅读