2011-02-16 106 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));

它構建了從給定數組開始的所有組合,遍歷該級別的所有選項並遞歸調用,然後將其與結果連接起來。