我想以递归方式找到数组nums []中的所有唯一组合,其中数字总和为给定的目标值。
private static List<List<Integer>> solve(int[] nums,int target) {
List<List<Integer>> res = new ArrayList<>();
if(nums == null || nums.length == 0) return res;
Arrays.sort(nums);
generate(res , new ArrayList<Integer>(),nums,target,0);
return res;
}
private static void generate(List<List<Integer>> res, ArrayList<Integer> m, int[] nums,int target, int index) {
if(target == 0 ){
res.add(m);
return;
}
for(int i=index;i<nums.length ; i++){
if(nums[i] > target) break;
else{
ArrayList<Integer> copy = new ArrayList<Integer>(m);
copy.add(nums[i]);
generate(res,copy,nums,target - nums[i],i+1);
}
}
}
但是当我尝试这个输入时,例如:
nums = {2,3,6,7} and target = 7;
我得到了
[[7]]
而不是预期的结果
[[2,2,3],[7]]
答案 0 :(得分:0)
这一行
"generate(res,copy,nums,target - nums[i],i+1);"
有问题。
也许尝试将i + 1替换为i
答案 1 :(得分:0)
您只允许 nums 中每个值的一个实例。您需要以下两种解决方案之一:
使用内部循环测试范围1到目标// nums中的所有可能性。在给定的测试用例中,您需要尝试1和2个三分;以及后来的1,2和3两个。将目标更改为12,您将看到此更改的明显效果,包括以下低值解决方案:
3 3 2 2 2 3 3 3 3
...你必须尝试使用2和4个三分球。 1和3三分之一将无法找到更小的解决方案。