Existen dos formas de interpretar el requisito "ascendente". La interpretación más flexible es "en cada lista, los enteros deben aparecer en orden ascendente". La interpretación más estricta es "las listas deben darse en orden". Supongo que es lo que quieres, pero se me ocurrió una forma iterativa simple de satisfacer el requisito más flexible.
Para n elementos, cuente a través de todos los números de n bits. Si el bit correspondiente a un elemento está allí, entonces está en la lista de resultados.
public static void displaySubsets(List<Integer> sortedInts) {
int n=sortedInts.size();
long combinations = 1 << n;
for (int setNumber=0; setNumber<combinations; setNumber++) {
List<Integer> aResult = new ArrayList<Integer>();
for (int digit=0; digit<n; digit++) {
if ((setNumber & (1<<digit)) > 0) {
aResult.add(sortedInts.get(digit));
}
}
System.out.println(aResult.toString()+", ");
}
}
Resultado para 1,2,3,4,5 es: [], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3], [4], [1, 4], [2, 4], [1, 2, 4], [3 , 4], [1, 3, 4], [2, 3, 4], [1, 2, 3, 4], [5], [1, 5], [2, 5 ], [1, 2, 5], [3, 5], [1, 3, 5], [2, 3, 5], [1, 2, 3, 5], [4, 5 ], [1, 4, 5], [2, 4, 5], [1, 2, 4, 5], [3, 4, 5], [1, 3, 4, 5] , [2, 3, 4, 5], [1, 2, 3, 4, 5]
Sí, lo sé, pierdo puntos por no usar recursividad.
Publica un código? Dependiendo de cómo implemente esto, puede que solo requiera una pequeña modificación de lo que ya tiene. Por ejemplo, estás trabajando con una pila, ¿verdad? En cada paso recursivo, comience a iterar desde la pila [paso recursivo - 1] + 1 en lugar de desde 0. – IVlad
Si publico un código, se arruinará el desafío de programación :-) – Adamski
Bueno, lo siento, pero esto no es mucho desafío :). Lo he escrito cientos de veces para el CS de la escuela secundaria. – IVlad