【发布时间】:2020-03-13 01:50:14
【问题描述】:
给定一个长度为 n 个元素的数组,其中每个元素表示集合大小,确定可以选择 K 大小集合的方式数。
条件:您不能从一组中选择多个元素。如何 解决这个问题(任何程序)
例子:
输入:
n = 4
k = 3
{1,2,1,1} Each value represents number of elements in each set
输出:7
Example :
{1},{2,3},{4},{5}
{1,2,4}
{1,2,5}
{1,3,4}
{1,3,5}
{1,4,5}
{2,4,5}
{3,4,5}
我尝试过的代码,但它返回 10 个不符合条件的值 我在这里犯了什么错误? 他们只是给出了子集长度而不是实际子集。所以我基于所有子集长度的总和,我正在形成一个新数组
count = 0
def printCombination(arr, n, r):
global count
data = [0]*r
combinationUtil(arr, data, 0,
n - 1, 0, r)
def combinationUtil(arr, data, start,
end, index, r):
global count
if (index == r):
for j in range(r):
print(data[j], end=" ")
print()
count += 1
return
i = start
while(i <= end and end - i + 1 >= r - index):
data[index] = arr[i]
combinationUtil(arr, data, i + 1,
end, index + 1, r)
i += 1
in_val = [1,2,1,1]
arr = list(range(1,sum(in_val)+1)) r = 3
n = len(arr)
printCombination(arr, n, r)
print(count)
我们可以用一些公式用最少的时间解决这个问题,而不是模拟每个子集并遍历。请对此有所了解或给我建议以进一步进行。
【问题讨论】:
-
给定条件“您不能从一组中选择多个元素”为什么 {1,2,3} 有效?这不是从集合 {2,3} 中选择两个值吗? {1,3,4} 和 {1,4,3} 不是同一个集合吗?
-
@DarrylG 错误已更正
-
不应允许同组
-
@johnwilson——为计数创建了一个函数(因为你提到只需要方法的数量)。如果您需要实际的套装,请告诉我。
标签: python algorithm data-structures