在java中通过引用传递的问题

时间:2016-04-17 21:59:15

标签: java recursion

我试图从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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

添加到current时,您需要创建result的副本,如:

result.add(new ArrayList<>(current));

否则,当从当前删除项目时,它们也将从结果中删除。