Как сгенерировать все возможные перестановки длиной 4 из 5 чисел? - PullRequest
2 голосов
/ 18 июня 2011

Итак, я надеялся выяснить код, который бы закончил это:

public List<List<Integer>> create4(List<Integer> dice) {
   //unknown code



        return listOf4s;
    }

Таким образом, кубик всегда будет списком из 5 целых чисел,

из 5 целых чисел, которые я хотел бысоздайте список каждой возможной перестановки, используя только 4 числа.

Надеюсь, я прояснил это достаточно.

Я искал вокруг, но не видел ничего, что мог бы использовать.Любая помощь будет отличной!

Ответы [ 4 ]

2 голосов
/ 18 июня 2011

В Интернете есть множество примеров кода, которые вы можете использовать для своих нужд.Например, для начала ознакомьтесь с этой статьей генератор перестановок .

1 голос
/ 18 июня 2011

Мне нравится более короткий код;)

public List<List<Integer>> create4(List<Integer> dice) {
    List<List<Integer>> listOf4s = new ArrayList<List<Integer>>();
    for(Integer num : dice) {
        List<Integer> dice2 = new ArrayList<Integer>(dice);
        dices2.remove(num);
        listOf4s.add(dices2);
    }
    return listOf4s;
}
1 голос
/ 18 июня 2011

Я не пробовал это, но, надеюсь, это поможет.

public List<List<Integer>> createN(List<Integer> dice) {
    if (dice.size() == 1) {
        List<List<Integer>> permutations = new ArrayList<List<Integer>>();
        permutations.add(dice);
        return permutations;
    }
    else {
       List<List<Integer>> permuations = new ArrayList<List<Integer>>();
       for (int i=0;i<dice.size();i++) {
           List<Integer> remainingElementsInPermutationSet = new ArrayList<Integer>();
           Integer firstElementInPermutationSet = null; 
           for (int j=0;j<dice.size();j++) {
               if (i==j) {
                  firstElementInPermutationSet = dice.get(j);
               }
               else {
                   remainingElementsInPermutationSet.add(dice.get(j));   
               }
           }
           List<List<Integer>> remainderPermutations = createN(remainingElementsInPermutationSet);
           for (List<Integer> permutationRemainer : remainderPermutations) {
               List<Integer> permutation = new ArrayList<Integer>();
               permutation.add(firstElementInPermutationSet);
               permutation.addAll(permutationRemainer);
               permuations.add(permutation);
           }
       }
       return permutations:
    }

} 
0 голосов
/ 18 июня 2011

Это то, что я сделал, используя идею @btreat, и она отлично работала.

public List<List<Integer>> create4(List<Integer> dice) {
        List<List<Integer>> permutations = new ArrayList<List<Integer>>();
        for(int i = 0; i < dice.size(); i++) {
            List<Integer> includedPermutation = new ArrayList<Integer>();
            for(int j = 0; j < dice.size(); j++) {
                if(i!=j) {
                    includedPermutation.add(dice.get(j));
                }
            }
            permutations.add(includedPermutation);
        }

        return permutations;
    }
...