<p>您可能正在寻找:</p>
<pre><code>a = ["filename", "timestamp", "custom"]
b = ["_", "-", ".", ""]
count = 0
def print_sequence(sol_words, sol_seps):
global count
print("".join([sol_words[i] + sep for (i, sep) in enumerate(sol_seps)] + [sol_words[-1]]))
count += 1
def backtrack_seps(sol_words, seps, sol_seps, i):
for (si, sep) in enumerate(seps):
sol_seps[i] = sep
if i == len(sol_words) - 2:
print_sequence(sol_words, sol_seps)
else:
backtrack_seps(sol_words, seps, sol_seps, i + 1)
def bt_for_sep(sol_words, seps):
backtrack_seps(sol_words, seps, [''] * (len(sol_words) - 1), 0)
def backtrack_words(active, words, seps, sol_words, i):
for (wi, word) in enumerate(words):
if active[wi]:
sol_words[i] = word
active[wi] = False
if i == len(words) - 1:
bt_for_sep(sol_words, seps)
else:
backtrack_words(active, words, seps, sol_words, i + 1)
active[wi] = True
backtrack_words([True] * len(a), set(a), set(b), [''] * len(a), 0)
print(count) #96
</code></pre>
<p>通常,当您需要枚举某一组值的所有可能性时,回溯是一种方法。回溯的方案总是相同的,在使用它来排列单词之后,分隔符会重复回溯。你知道吗</p>
<hr/>
<p><strong>编辑</p>
<p>问题的第二部分,被描述为寻找分隔符的组合,实际上是寻找所有重复的处置的问题。这样做比我想象的要简单:在从<code>seps</code>中选择一个分隔符之后,您不需要删除它(在本例中禁用它),而只需要保留它。你知道吗</p>