使用递归,编写一个程序,给定一个整数列表和一个给定的总和,将找到所有子集的数字,其总和为给定的总和。计算发现的子集数量。如果不存在子集,则应指示未找到解决方案。例如,给定列表6、13、3、3和总和为19,您的程序应该找到两个解决方案:
这是我的代码,但它只能找到一个子集,我想要找到所有的子集。有什么帮助吗?
6 + 13 = 19
13 + 3 + 3 = 19
将输入列表中的整数数量限制在最多20个整数。仅接受正整数,并使用0标记列表的结尾。 以下是一个示例运行:
Enter positive integers terminated with 0: 6 13 3 3 0
Enter the desired sum: 19
Solution 1:6 +13 =19
Solution 2: 13 +3 +3 =19
Found 2 solutions
这是我的代码,但它只能找到一个子集,我想要找到所有的子集。有什么帮助吗?
public static boolean SubSetSum(int start, int[] nums, int target) {
if (start >= nums.length) {
return (target == 0);
}
if (SubSetSum(start + 1, nums, target - nums[start])) {
System.out.println( nums[start] );
return true;
}
if (SubSetSum(start + 1, nums, target)) {
return true;
}
return false;
}
public static void main(String[] args) {
int[] mySet = {4,1,3,2};
int sum = 5;
System.out.println("The Goal is : " + sum);
SubSetSum(0,mySet, sum) ;
}
}
SubSetSum()
的调用。 - Brydenrtarget==0
,那么你就达到了目标,但你没有相应的代码。你只有在start
到达数组末尾时才检查target==0
。所以一眼看去,这是最明显的问题。另一个调试提示是在函数的第一行打印出函数参数,这样你就可以跟踪所有的调用。 - Jason C