Python 杨辉三角

Python Yanghui Triangle

Posted by BlueFat on Wednesday, August 10, 2022

解法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)