【发布时间】:2020-07-31 19:07:05
【问题描述】:
我正在编写这段代码(基础代码归功于 Shreyanshi Arun),它打印给定集合的所有子集的总和:
def subsetSums(arr, l, r, sum=0):
# Print current subset
if l > r:
global k
print(sum,end=" ")
k += 1
return
# Subset including arr[l]
subsetSums(arr, l + 1, r, sum + arr[l])
# Subset excluding arr[l]
subsetSums(arr, l + 1, r, sum)
k = 0
arr = [0.5, 0.5, 1.5, 1.5, 2, 3, 5, 5]
n = len(arr)
subsetSums(arr, 0, n - 1)
print ("\n Combinations:",k)
我正在尝试调整它以接收可能有多少总和的count。当我离开代码时,变量 k 用作和计数器。但是,我希望此计数器仅在结果总和不等于任何前一个时增加。
例如,在这段代码中,结果是这样的:
19.0 14.0 14.0 9.0 16.0 11.0 11.0 6.0 17.0 12.0 12.0 [...]
Combinations: 256
可以看到,例如,第二个和第三个结果是 14.0。在这些情况下,我想避免 k 增加,因为第三个总和等于第二个总和。否则,我所有的组合都将产生 256(对于长度为 8 的数组)。相同的条件应该适用于数组中任何即将出现的重复数字,而不仅仅是直接后继数字。
【问题讨论】:
-
可以尝试将结果添加到集合中,然后您可以使用集合的长度作为组合数
标签: python subset combinations