-
Notifications
You must be signed in to change notification settings - Fork 0
/
Leetcode Problem 39 Combination Sum.txt
63 lines (53 loc) · 1.67 KB
/
Leetcode Problem 39 Combination Sum.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
39. Combination Sum
Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), find all unique combinations in candidates where the candidate numbers sums to target.
The same repeated number may be chosen from candidates unlimited number of times.
Note:
All numbers (including target) will be positive integers.
The solution set must not contain duplicate combinations.
Example 1:
Input: candidates = [2,3,6,7], target = 7,
A solution set is:
[
[7],
[2,2,3]
]
Example 2:
Input: candidates = [2,3,5], target = 8,
A solution set is:
[
[2,2,2,2],
[2,3,3],
[3,5]
]
HINT : Use Backtracking.
Make recursive calls for same index if repeated element is allowed or
next index i+1 if no repetition of element is allowed.
public class Solution {
public IList<IList<int>> CombinationSum(int[] candidates, int target)
{
var result = new List<IList<int>>();
Array.Sort(candidates);
Backtrack( result,new List<int>(), candidates, target, 0);
return result;
}
public void Backtrack(List<IList<int>> result, List<int> currentList, int[] candidateSorted, int target, int startIndex)
{
if(target < 0)
{
return;
}
else if(target == 0)
{
result.Add(new List<int>(currentList));
}
else
{
for(int i = startIndex; i< candidateSorted.Count(); ++i)
{
currentList.Add(candidateSorted[i]);
Backtrack(result,currentList,candidateSorted, target - candidateSorted[i], i);
currentList.RemoveAt(currentList.Count() - 1);
}
}
}
}