1 子集和问题(Subset Sum Problem)
给定一组非负整数和一个值和,确定给定集合中是否存在和等于给定和的子集。
示例:
输入:set[]={3,34,4,12,5,2},sum=9
输出:真
有一个子集(4,5)和9。
输入:设置[]={3,34,4,12,5,2},和=30
输出:False
没有加起来等于30的子集。
推荐做法
子集和问题
试试看!
方法1:递归。
方法:对于递归方法,我们将考虑两种情况。
考虑最后一个元素,现在所需的总和=目标总和–最后一个元素的值,元素数量=总元素–1
保留“最后一个”元素,现在所需的总和=目标总和,元素数=总元素数–1
以下是isSubsetSum()问题的递归公式。
IsubSetSum(集合,n,总和)
=IsubSetSum(集合,n-1,总和)| |
IsubSetSum(集合,n-1,和集合[n-1])
基本情况:
IsubSetSum(set,n,sum)=false,如果sum>0且n==0
IsubSetSum(set,n,sum)=真,如果sum==0
2 源代码
u