using System.Collections.Generic;
public static void Main()
var solution = new Solution();
var candidates = new int[] {2,3,6,7};
var result = solution.CombinationSum(candidates, target);
foreach(var item in result){
foreach(var resultListItem in item){
Console.Write(resultListItem);
public IList<IList<int>> CombinationSum(int[] candidates, int target) {
var resultList = new List<IList<int>>();
if (candidates == null || candidates.Length == 0){
var itemCombination = new List<int>();
findCombination(resultList, itemCombination, candidates, target, 0);
private void findCombination(List<IList<int>> resultList, List<int> itemCombination, int[] candidates, int target, int index){
resultList.Add(new List<int>(itemCombination));
for (int i = index; i < candidates.Length; i++){
if (candidates[i] > target) {
itemCombination.Add(candidates[i]);
findCombination(resultList, itemCombination, candidates, target - candidates[i], i);
itemCombination.RemoveAt(itemCombination.Count - 1);