请问如何用python得到杨辉三角
形式为1,1,1,1,2,1
算法复杂度越简单越好
N = int(input())
listA = [[1]]
for i in range(1, N):
listB = [1]*(i+1)
for j in range(1, i):
listB[j] = listA[i-1][j-1] + listA[i-1][j]
listA.append(listB)
for i in listA:
for j in i:
print(j, end = ' ')
print() #想要把结果在一行输出,就把这个print删掉
题主您好,您可以看看这个
# n为多少就打印多少行
def yanghui(n):
# 存储杨辉三角的每行内容
lines = [[1], [1, 1]]
if n <= 2:
# 当n小于等于2时,直接返回对应行,因为下标从0开始,所以是n-1
return lines[n-1]
# 从第三行开始遍历,因为已经有两个现成的,所以可以少遍历两行,故n-2
for i in range(n - 2):
temp = []
# 遍历lines的最后一行以求取下一行的元素
for j in range(len(lines[-1]) - 1):
# 一个数的值等于它肩膀两个数的值之和
val = lines[-1][j] + lines[-1][j + 1]
temp.append(val)
# 然后将左右两边的两个1放进行里面
lines.append([1] + temp + [1])
# 此时的杨辉三角应该是[[1], [1, 1],[1,2,1]...]的形式
# 然后遍历打印出来
for i in lines:
for j in i:
print(j,end=" ")
# 假设打印5行杨辉三角里面的数字
yanghui(5)
# numRows是需要写到第几行
numRows = 5
l1 = [1]
l2 = []
n = 0
while n < numRows:
for i in l1:
l2.append(i)
l1 = [sum(t) for t in zip([0]+l1, l1+[0])]
n += 1
print(l2)