【问题标题】:Find combinations in arrays在数组中查找组合
【发布时间】:2012-11-19 19:35:45
【问题描述】:

我在 java 中有一个这样的二维数组

transmission communication tv television  
approach     memorycode  
methodact

我需要获得所有组合,例如:

{transmission,approach,methodact},{transmission,memorycode,methodact},{communication,approach,methodact},...

谁能提供一个适用于 nXn 数组的示例,即使它只有两行?

【问题讨论】:

  • 好的。那么,到目前为止你写了什么?你有什么问题?此外,如果这是家庭作业(我怀疑它是),那么在这里声明它被认为是合适的。这并不意味着你不会得到帮助,但如果你敢于直面这件事,你可能会得到别人的帮助,否则他们会不屑一顾,认为你是在试图欺骗我们为你做功课。跨度>
  • 等一下,Aruna,你是在要求人们给你工作代码吗?
  • 让 cmets 在其他人的答案上回复他们,而不是新的答案。

标签: java algorithm


【解决方案1】:

这应该可以解决问题:

static Set<List<String>> allComb(String[][] opts) {

    Set<List<String>> results = new HashSet<List<String>>();

    if (opts.length == 1) {
        for (String s : opts[0])
            results.add(new ArrayList<String>(Arrays.asList(s)));
    } else
        for (String str : opts[0]) {
            String[][] tail = Arrays.copyOfRange(opts, 1, opts.length);
            for (List<String> combs : allComb(tail)) {
                combs.add(str);
                results.add(combs);
            }
        }
    return results;
}

【讨论】:

  • 如果我有 4x4 数组,最后一行中的所有字符串都添加到一个组合中。我希望每个组合中的每一行都只有一个字符串
  • 抱歉,代码有误。更新了我的答案。让我知道它是否有效。
【解决方案2】:

这段 JavaScript 代码可以帮助你:

var sampleArray = [["transmission","communication","tv","television"], ["approach","memorycode"], ["methodact"]];

var GetAllCombinations = 函数(array2d) {

var ret=[];

var fn = function(arr,index,cur)
{
    var ret = [];
    for (var i=0; i<arr[index].length; i++)
    {
        var x = cur.slice(0);
        x.push(arr[index][i]);
        if (index == arr.length-1)
            ret.push(x);
        else
            ret = ret.concat(fn(arr,index+1,x));
    }
    return ret;
};
return fn(array2d,0,[]);

} console.log(GetAllCombinations(sampleArray));

它从给定数组开始构建所有组合,遍历该级别的所有选项并递归调用它,然后将其与结果连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多