二项式系数

问题

编写程序,求二项式系数列表中(杨辉三角)第k层系数
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
.......
(a+b)^k 其中k从0开始

  1. 把第k行的系数存储在队列中
  2. 依次出队k层的系数(每行最后一个1不出队),并推算k+1层系数
    添加到队尾,最后在队尾添加一个1,便变成k+1行

例如第2行为例子

  1. deque([1,2,1])
  2. 依次出队后和队首相加,并添加到队尾,出队两次,结果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)

原文地址:https://www.cnblogs.com/Py00/p/7697509.html