Entonces desea todos los subconjuntos de todas las permutaciones de 1 … N-1. En su lugar, puede revertir esta tarea y calcular todas las permutaciones de todos los subconjuntos; esto hace que sea más fácil evitar duplicados.
Para iterar sobre todos los subconjuntos de 0 … N-1 (excluyendo el conjunto vacío), puede iterar sobre un int sin signo y tomar los patrones de bits. Luego, para encontrar todas sus pemutaciones, se puede utilizar la función de biblioteca estándar std::next_permutation
. En código C ++:
#include
#include
#include // para next_permutation
- ¿Cuáles son las mejores respuestas a las preguntas formuladas en una entrevista que explican quién es usted?
- Cómo prepararse para una entrevista Java con 15 meses de experiencia
- ¿Cómo es la entrevista en Pandora, CA?
- Dada una matriz, cuyos elementos son números positivos, ¿cuál es la suma máxima de una subsecuencia con la restricción de que no hay 2 números en la secuencia adyacentes a la matriz?
- ¿Qué tan difíciles son las entrevistas técnicas de Ooyala para el puesto de "pasante de ingeniero de software"?
void print_subsets (int N)
{
// Verificar patrones 1 … N-1 (excluyendo i = 0 (conjunto vacío))
unsigned int i = 1, n = 1u << N;
for (unsigned int i = 1; i <n; ++ i) // Cambie a i <n-1 si no desea incluir permutaciones completas
{
// Comprueba si cada bit está activo para este patrón
secuencia std :: vector ;
para (unsigned int j = 0; j <n; ++ j)
{
si (i & (1u << j))
{
secuencia.push_back (j);
}
}
// Ahora imprime todas las permutaciones de esta secuencia
hacer
{
para (unsigned int k: secuencia) std :: cout << k;
std :: cout << std :: endl;
}
while (std :: next_permutation (secuencia.begin (), secuencia.end ()));
}
}
int main ()
{
// Prueba en un ejemplo
print_subsets (4);
int foo;
std :: cin >> foo;
devuelve 0;
}
Actualización: ¿Acabo de ver que quieres imprimirlo para todas las permutaciones, no solo para una? Respuesta actualizada para eso.
Actualización 2: lo cambió para que la permutación completa también se incluya como una subpermutación. Si desea excluir la permutación completa, cambie el bucle en la línea 9.