我一直在努力解决这个利特码问题Combination Sum
给定一组不同的候选整数和一个目标整数,>;将返回一个列表,其中>;所选数字与目标的和为候选的所有唯一组合.您可以按任何顺序退回组合.
同样的数字可以从候选人中 Select ,次数不限.如果所选数字中至少有一个的频率不同,则两个组合是唯一的.
我想出了这个解决方案:
class Solution {
public void recUtil(List<List<Integer>> result, int[] candidates, List<Integer> list, int sum, int target, int ind) {
if(sum>target || ind>=candidates.length) return;
if(sum==target) {
result.add(new ArrayList<>(list));
return;
}
recUtil(result, candidates, list, sum, target, ind+1);
list.add(candidates[ind]);
recUtil(result, candidates, list, sum+candidates[ind], target, ind);
list.remove(list.size()-1);
}
public List<List<Integer>> combinationSum(int[] candidates, int target) {
List<List<Integer>> result = new ArrayList<>();
recUtil(result, candidates, new ArrayList<>(), 0, target, 0);
return result;
}
}
如果我将第5行result.add(new ArrayList<>(list));
替换为result.add(list);
,则此解决方案不起作用
对于输入:
[2,3,6,7]
和目标7
,我在结果ArrayList中得到两个空的ArrayList
[[],[]]
而不是
[[2,2,3],[7]]
我知道这一定是件蠢事,所以我不敢在这里问. 我是Java新手,有谁能解释一下为什么只是将列表添加到结果中不起作用.