2 回答
TA贡献1796条经验 获得超4个赞
在您的情况下,代码是:
import itertools
def itersum(nums, target):
result = [seq for i in range(len(nums),0,-1) for seq in itertools.combinations(nums,i) if sum(seq) == target]
if result != target:
for j in range(target):
result1 = [seq for i in range(len(nums),0,-1) for seq in itertools.combinations(nums,i) if sum(seq) == target + j]
result2 = [seq for i in range(len(nums),0,-1) for seq in itertools.combinations(nums,i) if sum(seq) == target - j]
if (len(result1) + len(result2)) > 0:
result = result1 if result1 > result2 else result2
break
return result
A = [12, 79, 99, 91, 81, 44]
s = 150
itersum(A, s)
TA贡献1818条经验 获得超11个赞
该函数应该返回一个列表列表,因为可能有多个组合加起来为给定的总和:
def closest(s, A):
if s == 0:
return [[]]
o = []
for i, n in enumerate(A):
if n <= s:
for c in closest(s - n, A[i + 1:]):
o.append([n] + c)
return o
以便:
closest(150, [12, 79, 99, 91, 81, 47])
返回:
[[12, 91, 47]]
然后:
closest(10, [4, 5, 6, 2, 1, 3])
返回:
[[4, 5, 1], [4, 6], [4, 2, 1, 3], [5, 2, 3], [6, 1, 3]]
添加回答
举报