解法1: 前后补1,计算中间值占位数
- 创建triangle列表,制定前2行数据,方便下列计算
- 第3行开始,pre_row记录第2行值
- cur_row占位: 前后不用管,计算控制中间值占位数
- 新行填充,前填充1,中间放上一行计算值,后再填充1
n=6
triangle=[[1],[1,1]] #先制定两行
for i in range(2,n): #从第3行开始
pre_row=triangle[i-1] #记录前一行,即第2行
cur_row=[1] # 创建新行列表,前补1
for j in range (i-1): # 控制每一行中间所需位数,如第3行中间需要1位
cur_row.append(pre_row[j]+pre_row[j+1])
cur_row.append(1) #后补1
#新行数据完整再添加到triangle中
triangle.append(cur_row)
# print(cur_row)
# 遍历triangle打印三角型
for x in range (len(triangle)):
print(" "*(n-x),*triangle[x]) # 填充空格且解包列表
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
同上制定1行
n=6
triangle=[[1]]
for i in range(1,n):
pre_row=triangle[i-1]
cur_row=[1]
for j in range (i-1):
cur_row.append(pre_row[j]+pre_row[j+1])
cur_row.append(1)
triangle.append(cur_row)
print(cur_row)
for x in range (len(triangle)):
print(" "*(n-x),*triangle[x])
利用最后一位+首位
>>> a=[1]
>>> print(a[-1],a[0])
1 1
n=6
print([1])
for i in range(n):
cur_row=[1]
if i != 0:
for j in range(i-1):
cur_row.append(pre_row[j]+pre_row[j+1])
cur_row.append(1)
print(cur_row)
pre_row=cur_row
末尾加0
计算每次将最后一位0开始计算 [-1]+[0]
n=6
pre_row=[1]
print(pre_row)
for i in range(1,n):
cur_row=[]
pre_row.append(0) # 末尾加0 [1,0]
for j in range(i+1):
cur_row.append(pre_row[j-1]+pre_row[j])
pre_row = cur_row
print(cur_row)
开辟空间会比append效率高些
n=6
pre_row=[1]
print(pre_row)
for i in range(1,n):
cur_row=[None]*(i+1)
pre_row.append(0) # [1,0]
for j in range(i+1):
value=pre_row[j-1]+pre_row[j]
cur_row[j]=value
pre_row=cur_row
print(cur_row)