我试图从leetcode - https://leetcode.com/problems/combination-sum/
解决这个问题我的测试用例是
Input = [1]
Result = 1
然而,它返回空结果。我认为代码做得很好。我的意思是函数getCombinations确实将值1添加到结果中。但最终combinationSum返回空结果。我认为这与通过引用传递相关的东西有关。什么可能出错的想法?
public class Solution {
public List<List<Integer>> combinationSum(int[] a, int target) {
Arrays.sort(a);
List<List<Integer>> result = new ArrayList<List<Integer>>();
ArrayList<Integer> current = new ArrayList<Integer>();
getCombinations(0, a, result, target,current);
return result;
}
public void getCombinations(int start, int[] a, List<List<Integer>> result, int target, ArrayList<Integer> current) {
if(target == 0) {
result.add(current);
return;
}
if(target < 0) {
return;
}
for(int i=start;i<a.length; i++) {
current.add(a[i]);
getCombinations(i+1, a, result,target-a[i],current);
current.remove(current.size()-1);
}
}
}
答案 0 :(得分:1)
添加到current
时,您需要创建result
的副本,如:
result.add(new ArrayList<>(current));
否则,当从当前删除项目时,它们也将从结果中删除。