在计算机中习惯以0开始计算,所以前6行就是0,1,2,3,4,5
这6行,从第2行开始,非头尾数值为其肩膀上的两个数之和,头尾数值都为1。
n = 6
triangle = [[1], [1, 1]] # 起始这两行特殊处理
for i in range(2, n): # 第6行数据其实就是i=5时的数据
pre = triangle[-1] # 上一行数据
cur = [1] # 初始化当前行数据
for j in range(0, i - 1):
cur.append(pre[j] + pre[j + 1])
cur.append(1) # 补最后一个数据
triangle.append(cur)
print(triangle)
# [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1], [1, 5, 10, 10, 5, 1]]
这种解题思路是把第0和1
行特殊处理,也可能用另一种解题思路
n = 6
triangle = []
for i in range(n):
row = [1] # 初始化一行
triangle.append(row)
if i == 0:
continue
for j in range(i - 1):
pre = triangle[-2] # 一进外层循环就append了row,所以倒数第二个是上一行数据
row.append(pre[j] + pre[j+1])
row.append(1) # 补最后一个1
print(triangle)
原文:https://blog.51cto.com/zhaochj/2526357