算法一:杨辉三角的基本实现
- 下一行依赖上一行所有元素,是上一行所有元素的两两相加的和,再在两头加1
import datetime
start=datetime.datetime.now()
n=1000 #这里可以设置计算到几行
list=[] #设置一个空列表
count=1
for i in range(n):
cur=[1]
list.append(cur) #每一行开头是1,先固定1
if i==0: #第一行属于特殊行
continue
last=list[i-1]
for j in range(i-1):
cur.append(last[j]+last[j+1]) #下一行在上一行的基础上得出
else:
cur.append(1) #每一行的末尾是1,在末尾追加一个1
print(cur)
count+=1
delta=(datetime.datetime.now()-start).total_seconds()
print(count)
print(start)
print(delta)
实际编程时要实时注意时间复杂度和空间复杂度,当数据量增大时,不同效率差距非常明显
算法二:补0法
- 每一行相当于在上一行开头末尾补0后计算得下一行
import copy
import datetime
start=datetime.datetime.now()
n=1000
list=[1] #第一行是特例
print(list)
count=1
for i in range(1,n):
last=list.copy() #浅拷贝
last.append(0) #补0
list.clear() #使用append,要清除
for j in range(i+1):
list.append(last[j-1]+last[j])
else:
count+=1
print(list)
print(count)
delta=(datetime.datetime.now()-start).total_seconds()
print(start)
print(delta)
使用补0法效率有所上升