【发布时间】:2017-07-04 21:32:20
【问题描述】:
这一定是一个经典的面试问题,但是,我在理解它时遇到了问题。
下面是我在 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 参数 (http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/) 但是
我的问题是我的实现有什么问题?
你能解释一下吗?
为了调试,我每次都打印出“used”。 used 参数在打印“广告”后变为 (True, True, True, True) ,然后它不会比这更深。如果我坚持使用used,修复used 的聪明方法是什么?
【问题讨论】:
-
顺便说一句,
>>> [''.join(c) for c in combinations(['a','b','c','d'], 2)] ; ['ab', 'ac', 'ad', 'bc', 'bd', 'cd']
标签: python algorithm recursion combinations