【问题标题】:Can you return n choose k combinations in Javascript using Array.flatMap?您可以使用 Array.flatMap 在 Javascript 中返回 n 选择 k 组合吗?
【发布时间】:2021-02-01 11:46:09
【问题描述】:

比如这是5选2:

    var array = [0,1,2,3,4];
    
    var result = array.flatMap(
        (v, i) => array.slice(i+1).map(w => [v, w]) 
    );
    
    console.log(result);

使用这种方法我怎么能做到 5 选择 3?

【问题讨论】:

  • 预期输出是什么?
  • [[0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 2, 3], [0, 2, 4], [ 0, 3, 4], [1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
  • @YuvalLevental 不要为您的预期结果添加评论,而是编辑您的问题。

标签: javascript arrays probability


【解决方案1】:

只需添加另一层嵌套:

var array = [0,1,2,3,4];

var result = array.flatMap((v, i) =>
    array.slice(i+1).flatMap((w, j) =>
        array.slice(i+1+j+1).map(u =>
            [v, w, u]
        )
    )
);

console.log(result);

此时,使用递归可能更容易:

function choose(arr, k, prefix=[]) {
    if (k == 0) return [prefix];
    return arr.flatMap((v, i) =>
        choose(arr.slice(i+1), k-1, [...prefix, v])
    );
}

console.log(choose([0,1,2,3,4], 3));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多