これは古典的なインタビューの質問でなければなりませんが、私はそれを理解することに問題があります。印刷n再帰を使用してkの組み合わせアルゴリズムを選択
以下はPythonで実装したものです。実行すると、ab, ac, ad
しか印刷されません。それは'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])
上記の行を渡したときの正解はab,ac,ad,bc,bd,cd
です。
used
param(http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/)を使用せずにここから正しい実装を知っていますが、 私の質問は私の実装ですか?
あなたはそれに少し気をつけていただけますか?
デバッグするたびに、私は毎回「used」を印刷しました。 used
paramは "ad"を印刷した後に(True、True、True、True)になり、それより深くは進まない。 used
を使用するとしたら、used
を修正するにはどうすればいいですか?あなたがをバックトラックときは、解除used[i]
に忘れてしまった