【问题标题】:Find all combinations of strings in javascript array在javascript数组中查找所有字符串组合
【发布时间】:2018-08-18 14:33:13
【问题描述】:

如何遍历一个字符串值数组并输出 N 个字符串值的所有组合?

我还需要保留每个组合,以便循环遍历这些组合以在数据库中创建记录。

我找到了一个combination generator,它有助于要求最低要求,我对其进行了如下修改:

var combine = function(a, min) {
var fn = function(n, src, got, all) {
    if (n == 0) {
        if (got.length > 0) {
            all[all.length] = got;
        }
        return;
    }
    for (var j = 0; j < src.length; j++) {
        fn(n - 1, src.slice(j + 1), got.concat([src[j]]), all);
    }
    return;
}
var all = [];
for (var i = min; i < a.length; i++) {
    fn(i, a, [], all);
}
all.push(a);
return all;
}

var subsets = combine(["RT","PT","DDA"], 1);

这个输出:

RT,PT,DDA,RT,PT,RT,DDA,PT,DDA,RT,PT,DDA

从技术上讲,它具有所有正确的输出,但我需要将它们分解成独特的组合,以便输出如下:

[[RT],[PT],[DDA],[RT,PT],[RT,DDA],[PT,DDA],[RT,PT,DDA]]

拥有一个数组数组可以让我稍后循环使用索引在数据库中创建唯一记录。至少这是我的想法,我真的可以使用一些帮助,因为我仍在尝试完全理解递归函数。

【问题讨论】:

    标签: arrays generator combinations


    【解决方案1】:

    请注意,N 项的每个组合(包括空的一项)对应于0..2^N-1 范围内的二进制数 K。如果 K 在第 i 个位置包含 1 位,则第 i 个项目包含在第 K 个组合中。例如,值 k=5=101binary 对应于第 0 项和第 2 项的组合(在您的情况下为 [RT,DDA])。

    所以只需为K=1..2^N-1 制作循环,检查K 的位并构建相应的组合。伪代码:

    for (k = 1; k < (1 << N); k++):
        comb = []
        t = k
        idx = 0
        while t > 0:
            if (t and 1):
               comb = comb + A[idx]               
            t = t << 1
            idx++
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-02
      • 2020-02-02
      • 2018-06-03
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      相关资源
      最近更新 更多