python|python 打印杨辉三角

基本方法:下一行是上一行所有元素两两相加得到,两端再添加上1

n = int(input('>>')) tiangle=[[1],[1,1]]#预先定义前两行 for i in range(2,n): per=tiangle[i -1] cur = [1]#创建新行,首位为1 for j in range(i-1):#循环添加中间值 cur.append(per[j]+per[j+1]) cur.append(1)#末位添加1 tiangle.append(cur) print(tiangle)#将新生成的行添加到总列表

补零法:在上一行行尾补上0,下一行首尾的1也可以由此计算得来
#末尾补零法0 n=int(input('>>')) t = [[1]] for i in range(1,n): pre = t[i-1]+[0]#生成一个新列表,不会改变原始的里列表 #pre= t[i-1].copy() #pre.append(0) cur = [] for j in range(i+1): #新增行的第一项等于上一行表的末项pre[-1]加上第一项pre[1] cur.append(pre[j-1]+pre[j]) t.append(cur) print(t)

末尾补零法在推算新行的首项时使用了负索引
# 两端补零法 ==== n=int(input('>>')) t = [[1]] for i in range(1,n): pre =[0]+t[i-1]+[0] cur = [] for j in range(i+1): cur.append(pre[j]+pre[j+1]) t.append(cur) print(t)

对称法 :一次性开辟出空间,先算出前一半的值,然后对称赋值 【python|python 打印杨辉三角】一次性开辟出第n行所需空间然后算值替换,比循环迭代append添加更高效。每次只推算一半,时间复杂度更低
n = int(input('>>')) triangle = [[1],[1,1]] for i in range(2,n): row = [1]*(i+1)#打印第n行先创建出n个元素列表 pre = triangle[i-1] for j in range(i//2):#推算该行前一半的值 val = pre[j]+pre[j+1] row[j+1]= val row[-j-2]=val#对称赋值 triangle.append(row) print(triangle)

单行覆盖:在上面对称法的基础上降低空间复杂度 一次性开辟好n个长度的空间,每次推算新行时不生成新的列表,在原来的基础上赋值替换。
n = int(input('>>')) row = [1]*n#一次性开辟空间 for i in range(n): z =1 for j in range(i//2): val = z +row[j+1]#计算出来的新值会影响后面的计算,使用临时变量置换一下 z = row[j+1] row[j+1]=val row[i-j-1]=val#对称赋值row[j+1]=row[i-j-1] print(i,end='\t') print(row[:i+1])#最后在总列表中截取当前计算的行长度打印出来

    推荐阅读