39. Combination Sum

来源:互联网 发布:微信mac版 dmg 编辑:程序博客网 时间:2024/06/13 23:39

题目

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

思路

这是深度搜索思想的典型应用。例如搜索candidates=[1,2],target=3时的搜索路径。
公有两条路径满足:

[1,1,1][1,2]

这里写图片描述

实现代码

//assert: //1. elements can be used more than once//2. no duplicate elements.public class Solution {     private IList<IList<int>> result = new List<IList<int>>();        private int[] nums;        public IList<IList<int>> CombinationSum(int[] candidates, int target)        {            nums = candidates;            Array.Sort(nums);            dfs(new List<int>(), target, 0);            return result;        }        private void dfs(List<int> tmp, int remain, int start)        {            if (remain < 0) return;            if (remain == 0)                result.Add(new List<int>(tmp)); //donot directly add tmp!!!            else            {                for (int i = start; i < nums.Length; i++)                {                    tmp.Add(nums[i]);                    dfs(tmp, remain - nums[i], i); //start shoud be set i!!!                    tmp.RemoveAt(tmp.Count - 1); //remove last-index element in tmp                }            }        }}
原创粉丝点击