杨辉三角

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

  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

你可能感兴趣的:(杨辉三角)