[toc]
C(k,n)的O(Min(k,n-k))解法:#
快速回想组合数解法:
C(8,3) = 8 * 7 * 6 /(321) = 6 / 1 * 7 / 2 * 8 / 3
即分子和分母的个数是一样的
然后你要从小的开始逐步做乘和除的操作,就能求出来了,且一定能保证整除
1 | public int c(int k, int n) { |
杨辉三角打表法:#
如果空间没要求, 但是要求每次快速获取,则可以用杨辉三角提前打表
1 | for(int i=0;i<=n;i++){ |
``
如果用O(N)的复杂度,O(1)的空间求解C(n,m)?#
杨辉三角里,某行某列的值等同于C(n,m)
因此可以很短的复杂度得到值
也可以缓存
超大组合数(涉及取余)#
超纲题
- 乘法逆元+快速幂+阶乘
- Lucas定理