【发布时间】:2019-12-17 12:21:52
【问题描述】:
我想从Finding all possible combinations of numbers to reach a given sum 修改subset_sum() python 函数,以便:
- 它允许重复(排列)而不是组合
- 它只考虑给定长度的排列
我已成功完成 #2,但我需要 #1 方面的帮助:
def subset_sum(numbers, target, length, partial=[]):
s = sum(partial)
# check if the partial sum is equals to target
if s == target and len(partial) == length:
print(f"sum({partial})={target}")
if s >= target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i+1:]
subset_sum(remaining, target, length, partial + [n])
期望的输出应该是:
>>> subset_sum([3,9,8,4,5,7,10],target=15,length=3)
sum([3, 8, 4])=15
sum([3, 4, 8])=15
sum([4, 3, 8])=15
sum([4, 8, 3])=15
sum([8, 3, 4])=15
sum([8, 4, 3])=15
sum([3, 5, 7])=15
sum([3, 7, 5])=15
sum([5, 3, 7])=15
sum([5, 7, 3])=15
sum([7, 3, 5])=15
sum([7, 5, 3])=15
【问题讨论】:
标签: python algorithm permutation