Python 中的数字组合(硬币变化变化)
Number combinations in Python (coin change variation)
我正在尝试从提供的值列表中获取所有可能的唯一组合的列表,这些值的总和会产生一个也提供的目标值。我是初学者,看过一些关于硬币找零问题的内容,但是,这有些不同,因为我不是在尝试获取最少数量的元素。我尝试了很多方法,因为递归对我来说是非常新的和困难的,我想出了这段代码,在我增加递归限制后不再给我递归错误,但它每次只给出一个组合
from random import choice as pick
import sys
sys.setrecursionlimit(5000)
def find_combinations(elements, target, partial=None, results=None):
if results is None:
results = []
if partial is None:
partial = []
if len(results) == 2:
return results
else:
rand_num = pick(elements)
if partial.count(rand_num) < elements.count(rand_num):
partial.append(rand_num)
total = sum(partial)
if total == target:
if partial not in results:
results.append(partial)
print(results)
partial.clear()
find_combinations(elements, target, partial, results)
elif total > target:
partial.clear()
find_combinations(elements, target, partial, results)
elif total < target:
find_combinations(elements, target, partial, results)
如您所见,len 是任意的。我似乎无法突破 recursion.Any 解决方案将不胜感激:)
import itertools
stuff = [1, 2, 3]
Target = 3
for L in range(0, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
if sum(subset) == Target:
print(subset)
你可以使用 itertools
遍历每个组合,如果这个子集的总和等于目标,你可以在这里做任何你想做的事,我打印它,输出:
(3,)
(1, 2)
我正在尝试从提供的值列表中获取所有可能的唯一组合的列表,这些值的总和会产生一个也提供的目标值。我是初学者,看过一些关于硬币找零问题的内容,但是,这有些不同,因为我不是在尝试获取最少数量的元素。我尝试了很多方法,因为递归对我来说是非常新的和困难的,我想出了这段代码,在我增加递归限制后不再给我递归错误,但它每次只给出一个组合
from random import choice as pick
import sys
sys.setrecursionlimit(5000)
def find_combinations(elements, target, partial=None, results=None):
if results is None:
results = []
if partial is None:
partial = []
if len(results) == 2:
return results
else:
rand_num = pick(elements)
if partial.count(rand_num) < elements.count(rand_num):
partial.append(rand_num)
total = sum(partial)
if total == target:
if partial not in results:
results.append(partial)
print(results)
partial.clear()
find_combinations(elements, target, partial, results)
elif total > target:
partial.clear()
find_combinations(elements, target, partial, results)
elif total < target:
find_combinations(elements, target, partial, results)
如您所见,len 是任意的。我似乎无法突破 recursion.Any 解决方案将不胜感激:)
import itertools
stuff = [1, 2, 3]
Target = 3
for L in range(0, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
if sum(subset) == Target:
print(subset)
你可以使用 itertools
遍历每个组合,如果这个子集的总和等于目标,你可以在这里做任何你想做的事,我打印它,输出:
(3,)
(1, 2)