【发布时间】:2016-12-19 13:19:55
【问题描述】:
我想递归地找到数组 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]]
【问题讨论】:
-
您的代码在哪里允许重复?是否在任务意图内多次使用相同的列表元素?
标签: java recursion arraylist combinations