杨辉三角规律:下一行的值为:上一行分别在前端和末尾添加0,形成两个新列表,两个新列表的每个元素相加得到的新列表。
实践:
在线 python 运行:菜鸟驿站
循环实现
#!/usr/bin/python
def triangles(max=10):
arr = [1]
n = 0
while n < max:
print(arr)
arr1 = [0] + arr[:]
arr2 = arr[:] + [0]
arr = [arr1[i] + arr2[i] for i in range(len(arr1))]
n += 1
triangles()
生成器实现
# -*- coding: utf-8 -*-
def triangles():
arr = [1]
while True:
yield arr
arr1 = [0] + arr[:]
arr2 = arr[:] + [0]
arr = [arr1[i]+arr2[i] for i in range(len(arr1))]
# 期待输出:
# [1]
# [1, 1]
# [1, 2, 1]
# [1, 3, 3, 1]
# [1, 4, 6, 4, 1]
# [1, 5, 10, 10, 5, 1]
# [1, 6, 15, 20, 15, 6, 1]
# [1, 7, 21, 35, 35, 21, 7, 1]
# [1, 8, 28, 56, 70, 56, 28, 8, 1]
# [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
n = 0
results = []
for t in triangles():
results.append(t)
n = n + 1
if n == 10:
break
for t in results:
print(t)
if results == [
[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1],
[1, 8, 28, 56, 70, 56, 28, 8, 1],
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
]:
print('测试通过!')
else:
print('测试失败!')
在线js运行: jsbin.com
js 实现-循环
function triangles(max = 10) {
const arr = [1]
let n = 0
while (n < max) {
console.log(arr)
const arr1 = [0, ...arr]
const arr2 = [...arr, 0]
arr1.forEach((item, i) => arr[i] = arr1[i] + arr2[i])
n++
}
}
triangles()
js 迭代器实现
function *triangles() {
const arr = [1]
let n = 0
while (true) {
yield arr
const arr1 = [0, ...arr]
const arr2 = [...arr, 0]
arr1.forEach((item, i) => arr[i] = arr1[i] + arr2[i])
}
}
const res = triangles()
Array(10).fill(1).forEach((item, i) => {
console.log(res.next().value)
})