Cela doit être une question d'entrevue classique, cependant, j'ai un problème pour la comprendre.Imprimer n choisir k algorithme de combinaison utilisant la récursivité
Ci-dessous est mon implémentation en Python et si vous l'exécutez, il est seulement l'impression ab, ac, ad
. Il ne va pas au niveau 'b' (bc, bd)
.
def Print_nCk (the_list, k, str_builder, used):
if len(str_builder) == k:
print str_builder
return
else:
for i in xrange(len(the_list)):
if used[i] !=True:
str_builder+=the_list[i]
used[i] = True
Print_nCk(the_list, k, str_builder, used)
str_builder = str_builder[:-1]
Print_nCk(['a','b','c','d'], 2, "",[False,False,False,False])
La bonne réponse est ab,ac,ad,bc,bd,cd
lorsque la ligne ci-dessus est transmise.
Je connais la bonne implémentation d'ici sans utiliser used
param (http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/) mais ma question est ce qui ne va pas est ma mise en œuvre?
Pouvez-vous nous éclairer?
Pour déboguer, j'ai imprimé "utilisé" à chaque fois. Le used
param devient (True, True, True, True) après avoir imprimé "ad" alors il ne va pas plus loin que cela. Quelle est la façon intelligente de réparer le used
, si j'insiste pour utiliser used
?
Par ailleurs, '>>> [ '' .join (c) de c dans des combinaisons (['a', 'b', 'c', 'd'], 2)]; ['ab', 'ac', 'ad', 'bc', 'bd', 'cd'] ' –