39. 组合总和

思路: 使用dfs递归实现的深度优先搜索来实现对数据的查找

通过对原数组进行排序来实现剪枝

代码:

    /**
     * @Description: 使用dfs递归来实现的深度优先搜索来进行数据的查找
     * @auther: DaleyZou
     * @date: 17:11 2018-8-22
     * @param: candidates
     * @param: target
     * @return: java.util.List<java.util.List<java.lang.Integer>>
     */
    public List<List<Integer>> combinationSum(int[] candidates, int target) {
        List<List<Integer>> resultList = new ArrayList<>();
        List<Integer> result = new ArrayList<>();
        Arrays.sort(candidates); // 剪枝
        dfs(candidates, resultList, result, 0, target);
        return resultList;
    }

    private void dfs(int[] candidates, List<List<Integer>> resultList, List<Integer> result, int start, int target) {
        if (target < 0){            // target不符合
            return;
        }else if (target == 0){   // target符合
            resultList.add(new ArrayList<>(result));
        }else {                  // 继续进行数的查找
            for (int i = start; i < candidates.length; i++){
                result.add(candidates[i]);
                dfs(candidates, resultList, result, i, target - candidates[i]);
                result.remove(result.size() - 1);     // 数查找完后要进行回溯
            }
        }
    }
posted @ 2018-08-22 17:45  DaleyZou  阅读(314)  评论(0编辑  收藏  举报