gpt4 book ai didi

python - 找到固定长度数字的所有可能排列以达到给定的总和

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:17 24 4
gpt4 key购买 nike

我想修改 Finding all possible combinations of numbers to reach a given sum 中的 subset_sum() python 函数这样:

  1. 它允许重复(排列)而不是组合
  2. 它只考虑给定长度的排列

我已经成功完成了#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

最佳答案

既然您已经解决了在每个等价组中识别一个解的问题,我的建议是:不要改变该算法。相反,利用 itertools.permutations 来生成这些项目:

return list(itertools.permutations(numbers))

关于python - 找到固定长度数字的所有可能排列以达到给定的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com