Solución del problema
El problema en su código es que está usando la misma tempList
instancia en cada iteración.
Lo que está haciendo es simplemente tomar un List
, clasificarlo en un orden específico, agregarlo a la lista de resultados y luego seguir trabajando en la misma instancia que ya se agregó al final List
.
Ese mismo elemento en el que sigues trabajando se está ordenando desde afuera, pero es la misma lista que se encuentra dentro de la lista final List
y se agrega varias veces. De hecho, si imprimiera también su lista general en cada iteración, verá que cada uno de sus elementos cambia según la última permutación.
Para lograr lo que está tratando de hacer, debe crear una nueva instancia de tempList basada en su permutación anterior.
public static void nextPermutation(int[] nums) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
int temp = 0;
//Generating the first permutation equals to the array
List<Integer> listTemp = new ArrayList<>(Arrays.stream(nums).collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll));
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums.length - 1; j++) {
//Generating a new list instance with the elements of the previous permutation
listTemp = new ArrayList<>(listTemp);
//Permutation
temp = listTemp.get(j);
listTemp.set(j, listTemp.get(j + 1));
listTemp.set(j + 1, temp);
System.out.println("*" + listTemp + " *");
//Adding the new reference to the final list
list.add(listTemp);
}
}
System.out.println(list);
}
No hay comentarios:
Publicar un comentario