杨辉三角
杨辉三角的性质:每个数等于它上方两数之和
- 思路:
根据上述杨辉三角性质,新的行,是根据上一行的值两两相加得来, 为了便于取值我们在计算下一行时可以为上一行补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)]
- 进阶:
此时已经搞清楚了计算思路,可以再搞搞上层建筑(优化)了_
借助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
推荐阅读
- 【文魁大脑《思维导图精英班》国新梅第四幅《时间管理事件管理的方法-行动三角形》自主命题
- css|css三角的做法及其案例
- 模型学习(组织能力的杨三角)
- pascals|pascals triangle ii(杨辉三角、帕斯卡三角)
- 求正方形、长方形、三角形、平行四边形、梯形的面积
- 碗仔翅,当年火遍珠三角,没有鱼翅的碗仔翅!
- 每日练字·倒三角形
- 难忘的粽香
- 纯CSS实现小圆点和三角形图案
- Java基础|Java 打印空心等腰三角形(方法2)