¿Cómo puedo generar todas las posibles permutaciones de 4 en longitud a partir de 5 números?

Así que esperaba descubrir el código que terminaría esto:

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



        return listOf4s;
    }

Entonces, los dados siempre serían una lista de 5 enteros,

a partir de los 5 enteros, me gustaría crear una lista de todas las permutaciones posibles utilizando solo 4 números.

Espero haber dejado esto lo suficientemente claro.

He buscado alrededor pero no he visto nada que pueda usar. ¡Cualquier ayuda sería genial!

preguntado el 18 de junio de 11 a las 02:06

No, esto no es una tarea, es parte de un proyecto de código abierto que estoy tratando de hacer. Realmente solo estoy pidiendo ideas sobre cómo hacerlo. La fuente es muy temprana y el proyecto solo se inició hace 4 días, pero puede encontrarlo aquí: github.com/SethHikari/Dice-Poker-Stats -

3 Respuestas

Tiendo a gustarme el código más corto;)

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

Respondido el 18 de junio de 11 a las 10:06

No lo he probado, pero espero que ayude.

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:
    }

} 

Respondido el 18 de junio de 11 a las 06:06

Esto ha inspirado una gran idea, que en su lugar debería ejecutar un ciclo alternando un número que excluiré de la lista. - Seth Hikari

Esto es lo que hice usando la idea de @btreat y funcionó muy bien.

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

Respondido el 18 de junio de 11 a las 08:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.