小白笔记----------------------------------------leetcode(39. Combination Sum )

来源:互联网 发布:北京南街村方便面 知乎 编辑:程序博客网 时间:2024/05/16 15:40

Given a set of candidate numbers (C)(without duplicates) and a target number (T), find all unique combinations inC 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]]//解题思路是用递归代码如下这里有两个注意点,一个是要保护现场就是List.remove操作,还有一个是在target== 0 的时候,将结果放入result时要用new ArrayList的方式放入,因为result会覆盖之前的List值,所以不然放进去的是空值。
class Solution {    public List<List<Integer>> combinationSum(int[] candidates, int target) {        Arrays.sort(candidates);        List<List<Integer>> result = new ArrayList();        backtrack(result,new ArrayList<Integer>(),candidates,target,0);        return result;    }    public void backtrack(List<List<Integer>> result,List<Integer> list,int[] candidates,int target,int start){        if(target == 0){                    result.add(new ArrayList(list));                }            if(target > 0){                for(int i = start;i < candidates.length && target >= candidates[i];i++){                    list.add(candidates[i]);                    backtrack(result,list,candidates,target- candidates[i],i);                    list.remove(list.size()-1);                }            }                                        }}