子集和问题的一个实例为〈S,t〉。其中,S={ 1 x , 2 x ,…, n x }是一个常数的集合,c是一个常数。子集和问题判定是否存在S的一个子集S1,使得 S1中的所有元素之和等于c。
常熟集合为请求参数List<Double>,targetNumber为目标常数c
笨办法就是列举,假如有五个数1,2,3,4,5,求相加结果为7的组合,列举所有的相加组合,只要有一条支线的相加结果等于7,该支线后面的节点就不可以不考虑了,比如 1,2,4相加结果为7,那么1,2,4后面可能的组合就不需要考虑了
主要代码:
public static List<List<Double>> handleNumber(List<Double> list, Double targetNumber) {
List<List<Double>> resultList = new ArrayList<List<Double>>();
List<Double> tempList;
for (int i = 0; i < list.size(); i++) {
int nextIndex = i + 1;
if (hasNext(list, nextIndex)) {
tempList = new ArrayList<Double>();