combine
用签名(JavaScript)实现函数的最佳方法是什么
const array = ['a', 'b', 'c', 'd']; // множество элементов
const k = 3; // размер сочетаний
const combinations = combine(array, k);
k数组的combinations
所有组合在哪里(所有可能的k元素无序子集,没有来自数组的重复)?
预期返回值的示例:
const combinations = [
['a', 'b', 'c'], ['a', 'b', 'd'], ['a', 'c', 'd'], ['b', 'c', 'd']
];
Phillip J. Chase的 Twiddle 算法,来自计算机协会通讯 13:6:368 (1970)。通过替换先前组合中的一个元素来生成一系列组合。该算法不是很容易理解,我在答案的最后给出了本书页面的截图。下面,我的代码将组合生成为索引数组,但它们可以映射到数组元素:
此外,该算法可以生成掩码序列形式的组合。也许在某些情况下,口罩会更有用。下面的例子:
TypeScript中的解决方案:
JavaScript解决方案:
注:解决方案是基于某mgechev的脚本。