LeetCode 41: Combination Sum
2013-04-10 12:58
435 查看
Given a set of candidate numbers (C)
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.
Elements in a combination (a1, a2,
... , ak)
must be in non-descending order. (ie, a1 <= a2 <=
... <= ak).
The solution set must not contain duplicate combinations.
For example, given candidate set
target
A solution set is:
LL's solution:
DFS
1. DFS做出来res会有重复,因为相同的结果是从不同的路径走出来的,最后要去重(用HashSet)。
2. 要求res里面要从小到大sorted,需保证两点:1. candidate是soted,2. 顺序遍历candidate
若要求从大到小sorted,则只需更改以下几行:
4 if(target<0 || index>candidates.length-1) -> if(target<0 || index<0)
10 DFS(candidates,new ArrayList<Integer>(current),index+1,target); -> index-1
30 DFS(candidates,current,0,target) -> DFS(candidates,current,len-1,target)
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.
Elements in a combination (a1, a2,
... , ak)
must be in non-descending order. (ie, a1 <= a2 <=
... <= ak).
The solution set must not contain duplicate combinations.
For example, given candidate set
2,3,6,7and
target
7,
A solution set is:
[7]
[2, 2, 3]
LL's solution:
DFS
public class Solution { ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>(); public void DFS(int[] candidates,ArrayList<Integer> current,int index,int target){ if(target<0 || index>candidates.length-1) return; else if(target==0) res.add(current); else{ // left branch, not add the node DFS(candidates,new ArrayList<Integer>(current),index+1,target); // right branch, add the node as many as possible int node = candidates[index]; while(target-node>=0){ current.add(node); target = target-node; DFS(candidates,new ArrayList<Integer>(current),index,target); } } return; } public ArrayList<ArrayList<Integer>> combinationSum(int[] candidates, int target) { // Start typing your Java solution below // DO NOT write main() function int len = candidates.length; if(len<1) return res; res.clear(); Arrays.sort(candidates); ArrayList<Integer> current = new ArrayList<Integer>(); DFS(candidates,current,0,target); HashSet st = new HashSet(); st.addAll(res); res.clear(); res.addAll(st); return res; } }Note:
1. DFS做出来res会有重复,因为相同的结果是从不同的路径走出来的,最后要去重(用HashSet)。
2. 要求res里面要从小到大sorted,需保证两点:1. candidate是soted,2. 顺序遍历candidate
若要求从大到小sorted,则只需更改以下几行:
4 if(target<0 || index>candidates.length-1) -> if(target<0 || index<0)
10 DFS(candidates,new ArrayList<Integer>(current),index+1,target); -> index-1
30 DFS(candidates,current,0,target) -> DFS(candidates,current,len-1,target)
相关文章推荐
- Leetcode NO.39 Combination Sum
- [leetcode] Combination Sum
- LeetCode力扣之Combination Sum
- [LeetCode] Binary Tree Inorder Traversal [41]
- Leetcode: Combination Sum
- LeetCode--Combination Sum
- [leetcode] Combination Sum
- [leetcode]Combination Sum
- Combination Sum - LeetCode
- LeetCode_39---Combination Sum
- Leetcode-39: Combination Sum
- 【Leetcode】之Combination Sum
- [LeetCode] Combination Sum 2
- [Leetcode] Combination Sum
- LeetCode: Combination Sum
- Leetcode学习(41)—— Find All Anagrams in a String
- [leetcode] Combination Sum
- 【LeetCode练习题】Combination Sum
- leetcode:Combination Sum
- LeetCode----Combination Sum