Найти комбинации в массивах - PullRequest
2 голосов
/ 16 февраля 2011

У меня есть 2D-массив, как это в Java

transmission communication tv television  
approach     memorycode  
methodact

Мне нужно получить все комбинации, такие как:

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

Может ли кто-нибудь привести пример, который будет работать для массивов nXn, даже если в нем всего две строки?

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Это должно сработать:

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 голосов
/ 16 февраля 2011

Этот код в JavaScript может помочь вам:

var sampleArray = [["translation", "communication", "tv", "levision "], [" подхода "," код памяти "], [" methodact "]];

var GetAllCombination = function (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));

Он строит все комбинации, начиная с заданного массива, перебирает все опции для этого уровня и вызывает его рекурсивно, а затем объединяет его с результатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...