杨辉三角
代码实现
直接解法
# 直接解法
import datetime
start = datetime.datetime.now()
n = 10
yangHui = []
for i in range(0,n):
yangHui.append([])
for j in range (i+1):
yangHui[i].append(1) if (j==0) or (j == i) else yangHui[i].append(yangHui[i-1][j]+yangHui[i-1][j-1])
print((datetime.datetime.now()-start).total_seconds())
for i in range(n):
for j in range (i+1):
print(yangHui[i][j],end=" ")
print()
补0法
oldline = [1]
print(oldline)
for i in range (1, 10):
oldline.append(0)
newline = []
for j in range(i+1):
newline.append(oldline[j-1] + oldline[j])
print(newline)
oldline = newline
对称性
trangle = [[1],[1,1]]
for i in range (2, 10):
row = [1] * (i + 1)
trangle.append(row)
for j in range (i//2):
row[j+1] = trangle[i-1][j] + trangle[i-1][j+1]
if i%2 == 0 and (j+1) == i//2:
continue
row[-j-2] = row[j+1]
print(trangle)
单列表解法
n = 10
line = [1] * n
for i in range (n):
offset = n - i
swap = 1
for j in range(1, i//2+1):
val = line[j] + swap
swap = line[j]
line[j] = val
if i != 2 * j:
line[-j - offset] = val
print(line[:i+1])
运行效果
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
Last updated
Was this helpful?