2011-02-16 59 views
2

我在Java中的二维数组这样查找阵列组合

transmission communication tv television 
approach  memorycode 
methodact 

我需要让所有的组合,如:

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

有人可以提供,会为nXn的阵列工作的一个例子,即使它只有两行?

+3

好。那么,到目前为止你写了什么?你有什么问题?此外,如果这是家庭作业(我怀疑它是这样),在这里宣布它是被认为是适当的。这并不意味着你不会得到帮助,但往上冲一下前你可能会从谁的人本来就瞧不起,以为你想愚弄我们将做你的功课,你得到帮助。 – 2011-02-16 15:51:27

+0

等待第二个阿鲁娜,你问别人给你工作的代码? – 2011-02-16 16:05:01

+0

留在别人的答案评论做出回应,而不是新的答案。 – 2011-02-20 13:56:55

回答

3

这应该做的伎俩:

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; 
} 
0

此代码在JavaScript中,您可以:

VAR sampleArray = [[ “传输”, “沟通”, “电视”,“电视“],[”approach“,”memorycode“],[”methodact“]];

变种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));

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