我正在写一个算法来生成这种数组的所有可能的排列:
n=长度
k=数组中1的个数
所以这意味着如果我们有k 1,数组中就有n-k 0。
例如:
n=5;
k=3;
所以很明显这个数组有5个选择3个可能的排列,因为
n!/(k!(n-k)!
5个!/(3!2!)=(5*4)/2=10
数组的可能值
以下是所有的价值观:
一万一千一百
11010个
11001个
一万零一百一十
10101个
10011个
01110号
01101号
01011号
00111号
我想我应该使用递归算法,但我没有看到它我用C++编写了这个算法。
任何帮助都将不胜感激!
最佳答案
可以将组合拆分为以1开头的组合(n-1,k-1)和以0开头的组合(n-1,k)。
这本质上就是recursive formula for the choose function。