我需要构建一个递归函数,它接收一个整数列表(数字)和一个非负整数(目标) .
该函数将查找给定列表的任何可能子集,如果其值加起来并且等于目标,则返回 True
.
def subset_sum(numbers, target):
'''
numbers - a list of positive integers
target - a non-negative integer
returns True if the list 'numbers' has a sub-list with sum 'target',
False otherwise.
'''
Side Note: [] is a subset of any given list (set)
例子:
subset_sum([1,2,3,4], 8):
True
subset_sum([1,2,3,4], 11):
False
subset_sum([4,4,4], 05):
True
subset_sum([4,4,4], 11):
False
subset_sum([], 0):
True
任何帮助赞赏!
1 回答
这是子集求和问题的变体(子问题),您可以在这里阅读:
https://en.wikipedia.org/wiki/Subset_sum_problem
有一种伪编码算法概述了大约在多项式时间内解决任何整数(正或负)的问题 . 有趣的是,这是发布在Stackoverflow和python中!
Fast solution to Subset sum