例如,10,[1,2,3]
输出类似:
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
2 + 2 + 2 +2 + 2
3 + 3 + 3 + 2
3 + 2 + 2 + 2 + 1
注意:是小于等于,list 内的正整数有可能并不能正好等于 a.
例如,10,[1,2,3]
输出类似:
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1
2 + 2 + 2 +2 + 2
3 + 3 + 3 + 2
3 + 2 + 2 + 2 + 1
注意:是小于等于,list 内的正整数有可能并不能正好等于 a.
假設該問題符合下列假設:
列表內元素可重複使用
只要是能滿足小於等於上限值的組合都可接受, 就算遠小於上限值甚至是零也可以
以下是暴力法:
# code for python3
from itertools import combinations
def solve(lst, upperbound):
candidates = []
for n in lst:
for count in range(upperbound//n):
candidates.append(n)
allcomb = set()
for l in range(1, len(candidates)+1):
for comb in combinations(candidates, l):
if not comb in allcomb:
allcomb.add(comb)
if sum(comb) <= upperbound:
print('+'.join([str(n)for n in comb]))
solve([1,2,3], 10)
我回答過的問題: Python-QA
4 回答4.5k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.4k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
通过itertools.combinations_with_replacement我们写短一点的代码: