39. Combination Sum

来源:互联网 发布:证件照 软件 编辑:程序博客网 时间:2024/06/06 20:37

Given a set of candidate numbers (C(without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.

The same repeated number may be chosen from C unlimited number of times.

Note:

  • All numbers (including target) will be positive integers.
  • The solution set must not contain duplicate combinations.

For example, given candidate set [2, 3, 6, 7] and target 7
A solution set is: 

[  [7],  [2, 2, 3]]
从候选数组中找出和为taget的组合,候选数组中的数可以多次出现。

本题采用dfs可解。程序如下所示:

class Solution {    public void dfs(int[] candidates, List<List<Integer>> result,                             List<Integer> lst, int start, int target){        if (target == 0){            result.add(new ArrayList<Integer>(lst));            return;        }        if (target < 0||start == candidates.length){            return;        }                for (int i = start; i < candidates.length; ++ i){            lst.add(candidates[i]);            dfs(candidates, result, lst, i, target - candidates[i]);            lst.remove(lst.size() - 1);        }    }        public List<List<Integer>> combinationSum(int[] candidates, int target) {        List<List<Integer>> llst = new ArrayList<>();        List<Integer> lst = new ArrayList<>();        dfs(candidates, llst, lst, 0, target);        return llst;    }}





原创粉丝点击