Si encuentras algún fallo en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.
Solución:
Simplemente incremente un número binario y tome los elementos correspondientes a los bits que se establecen.
Por ejemplo, 00101101
significaría tomar los elementos en los índices 0, 2, 3 y 5. Dado que su lista es simplemente 1..n, el elemento es simplemente el índice + 1.
Esto generará permutaciones en orden. En otras palabras, sólo 1, 2, 3
se generará. No 1, 3, 2
o 2, 1, 3
o 2, 3, 1
etc.
No es mi código, pero estás buscando el powerset. Google me dio esta solución, que parece funcionar:
public IEnumerable> GetPowerSet(List list)
return from m in Enumerable.Range(0, 1 << list.Count)
select
from i in Enumerable.Range(0, list.Count)
where (m & (1 << i)) != 0
select list[i];
Fuente: http://rosettacode.org/wiki/Power_set#C.23
Esto es algo que he escrito en el pasado para lograr tal tarea.
List CreateSubsets(T[] originalArray)
List subsets = new List();
for (int i = 0; i < originalArray.Length; i++)
int subsetCount = subsets.Count;
subsets.Add(new T[] originalArray[i] );
for (int j = 0; j < subsetCount; j++)
T[] newSubset = new T[subsets[j].Length + 1];
subsets[j].CopyTo(newSubset, 0);
newSubset[newSubset.Length - 1] = originalArray[i];
subsets.Add(newSubset);
return subsets;
Es genérico, por lo que funcionará para enteros, largos, cadenas, Foos, etc.
Aquí puedes ver las reseñas y valoraciones de los usuarios
Si conservas alguna suspicacia o capacidad de beneficiar nuestro crónica puedes dejar una nota y con gusto lo analizaremos.