问题
编写程序,求二项式系数列表中(杨辉三角)第k层系数
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
.......
(a+b)^k 其中k从0开始
- 把第k行的系数存储在队列中
- 依次出队k层的系数(每行最后一个1不出队),并推算k+1层系数
添加到队尾,最后在队尾添加一个1,便变成k+1行
例如第2行为例子
- deque([1,2,1])
- 依次出队后和队首相加,并添加到队尾,出队两次,结果deque([1,3,3]),最后队尾+1,得deque([1,3,3,1])
Python代码
# !/usr/bin/env python
# -*-encoding: utf-8-*-
# author:LiYanwei
# version:0.1
'''
1.把第k行的系数存储在队列中
2.依次出队k层的系数(没行最后一个1不出队),并推算k+1层系数
添加到队尾,最后在队尾添加一个1,便变成k+1行
'''
from collections import deque
def yanghui(k):
'''
二项系数算法
:param k:
:return:
'''
# 0 -> 1 -> 2 ... -< k
# 第一步
q = deque([1])
for i in xrange(k):
for _ in xrange(i):
# 出队后和队首相加,并添加到队尾,循环i此
q.append(q.popleft() + q[0])
# 最后队尾+1
q.append(1)
return list(q)
print yanghui(5)