- Создать все возможные подмножества списка.
- Убедиться в сумме каждого подмножества. не превышает заданное целевое значение (max_sum).
Например, если я ввожу числа = [2, 3, 5] и max_sum = 6, я хочу, чтобы выходные данные были:
[[ ], [2], [3], [5], [2, 3]]
Вот что я пробовал:
Код: Выделить всё
if sum(current) > max_sum:
return []
if index == len(nums):
return [current]
include = generate_combinations(nums, max_sum, current + [nums[index]], index + 1)
exclude = generate_combinations(nums, max_sum, current, index + 1)
return include + exclude
max_sum = 6
result =generate_combinations(numbers , max_sum)
print(result)
Однако это возвращает такие результаты:
[[2], [2, 3 ], [2, 3, 5], [3], [3, 5], [5]]
Проблемы:
[*]Некоторые подмножества превышать max_sum (например, [2, 3, 5]).
[*]Я хочу, чтобы было включено пустое подмножество [], но оно отсутствует.
< /ol>
Что я пробовал:
Добавить условие для явного включения [] в начале рекурсии, но это не сработало должным образом .
Печать операторов отладки для проверки промежуточных значений, но я не уверен, где логика фильтрации нарушается.
Что не так с моей рекурсивной логикой фильтрации подмножеств на основе max_sum?
Есть ли лучший способ структурировать рекурсию в соответствии с требованиями?
Есть ли какие-либо крайние случаи, которые мне следует учитывать при создании ограниченных комбинаций?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ts-fail-to