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]]
添加回答
舉報