Java添加错误Leetcode 39组合问题

时间:2019-02-13 02:13:17

标签: java algorithm depth-first-search

我正在尝试解决leetcode 39组合问题。我发现算法将所有数字相加并减去最后一个数字。总是出错号码。

下面是我的解决方法。

class Solution {
    public List<List<Integer>> combinationSum(int[] candidates, int target) {

        List<List<Integer>> res = new ArrayList<> ();

        // corner case
        if (candidates == null || candidates.length == 0 || target == 0) return res;

        dfsHelper(res, candidates, target, new ArrayList<> (), 0);

        return res;
    }

    private void dfsHelper(List<List<Integer>> res, int[] candidates, int target, List<Integer> cur, int sum) {
        // base case
        if (sum == target) {
            Collections.sort(cur);
            System.out.println(target);

            if (!res.contains(cur)) {
                res.add(new ArrayList<> (cur));
            }
            return;
        } else if (sum > target) {
            return;
        }

        // recursion
        for (int i = 0; i < candidates.length; i++) {
            cur.add(candidates[i]);
            sum += candidates[i];
            System.out.println("****");
            System.out.println(cur);
            System.out.println(sum);
            dfsHelper(res, candidates, target, cur, sum);

            //recover
            sum = sum - candidates[i];
            cur.remove(cur.size() - 1);
        }
        return;
    }
}

我使用一个目标为8,候选者为[2,3,5]的测试用例,并打印出所有curList和总和。

  
     

[2]   2

     

[2,2] 4


[2,2,2] 6


[2,2,2,2] 8 8


[2,2,2,3] 9


[2,2,2,5] 11


[2,2,3] 7


[2,2,3,2] 9


[2,2,3,3] 10


[2,2,3,5] 12


[2,2,5] 9


[2,3] 5


[2,3,2] 7


[2、3、2、2] 9


[2,3,2,3] 10


[2、3、2、5] 12


[2、3、3] 8 8


[2、3、5] 10


[2,5] 7


[2、5、2] 9


[2、5、3] 10


[2、5、5] 12


[3] 3


[3,2] 5


[3,2,2] 7


[3,2,2,2] 9


[3,2,2,3] 10


[3,2,2,5] 12


[3,2,3] 8 8


[2、3、5] 10


[2,3] 6


[2,3,2] 8 8

对于最后的输出,您可以轻松地发现Java进行了错误的计算。我想知道这是怎么发生的。

0 个答案:

没有答案