# 问题

`candidates` 中的数字可以无限制重复被选取。

• 所有数字（包括 `target`）都是正整数。
• 解集不能包含重复的组合。

target = 7,

target = 8,

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.

Input: candidates = [2,3,6,7],

target = 7,

A solution set is: [ [7], [2,2,3] ]

Input: candidates = [2,3,5],

target = 8,

A solution set is: [ [2,2,2,2], [2,3,3], [3,5] ]

# 示例

```public class Program {

public static void Main(string[] args) {
var candidates = new int[] { 2, 3, 6, 7 };
var target = 7;

var res = CombinationSum(candidates, target);
ShowArray(res);

}

private static void ShowArray(List<IList<int>> candidates) {
foreach(var candi in candidates) {
foreach(var num in candi) {
Console.Write(\$"{num} ");
}
Console.WriteLine();
}
Console.WriteLine();
}

public static List<IList<int>> CombinationSum(int[] candidates, int target) {
var res = new List<IList<int>>();
var candi = new List<int>();
Combination(candidates, 0, target, candi, ref res);
return res;
}

public static void Combination(int[] candidates,
int start,
int target,
List<int> candi,
ref List<IList<int>> res) {
if(target < 0) return;
if(target == 0) {
return;
}
for(var i = start; i < candidates.Length; i++) {
Combination(candidates, i, target - candidates[i], candi.ToList(), ref res);
candi.RemoveAt(candi.Count - 1);
}
}

}
```

```2 2 3
7
```