leetcode- 39. Combination Sum

来源:互联网 发布:qq刷人气软件 编辑:程序博客网 时间:2024/06/06 15:54

39. Combination Sum

iven 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]]

和前面的subsets的思路基本是一致的,只是要添加一个判断,向结果里添加元素的时候,要满足和为target;还需要使用 i 而不是

i+1,因为可以使用重复的元素。


class Solution {    public List<List<Integer>> combinationSum(int[] nums, int target) {        List<List<Integer>> list = new ArrayList<>();        Arrays.sort(nums);        backtrack(list, new ArrayList<>(), nums, target, 0);        return list;    }    private void backtrack(List<List<Integer>> list, List<Integer> tempList, int [] nums, int remain, int start){        if(remain < 0) return;        else if(remain == 0) list.add(new ArrayList<>(tempList));        else{             for(int i = start; i < nums.length; i++){                tempList.add(nums[i]);                backtrack(list, tempList, nums, remain - nums[i], i); // not i + 1 because we can reuse same elements                tempList.remove(tempList.size() - 1);            }        }    }}


原创粉丝点击