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.

For example, given candidate set 2,3,6,7 and target 7,
A solution set is:
[7]
[2, 2, 3]

1.​`​dfs(candidates,target,i,tmp,sum);​`​​ 下次迭代还是从i开始，这样值可以重复
2.怎么避免得到的向量重复，有两种方法：
（1）

`if(i>0 && candidates[i] == candidates[i-1])//deal with dupicate                 continue;`

（2）

`if(!res.contains(item))                 res.add(new ArrayList<Integer>(item));`
`class Solution {public:    /**     * @param candidates: A list of integers     * @param target:An integer     * @return: A list of lists of integers     */    vector<vector<int> >res;    void dfs(vector<int> &candidates, int target,int cur,vector<int> &tmp,int sum){        if(sum>target){            return;        }        if(sum==target){            res.push_back(tmp);            return;        }        for(int i=cur;i<candidates.size();i++){            if(i>0 && candidates[i]==candidates[i-1]){                continue;            }            tmp.push_back(candidates[i]);            sum+=candidates[i];            dfs(candidates,target,i,tmp,sum);//i            sum-=candidates[i];            tmp.pop_back();        }    }    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {        // write your code here        vector<int> tmp;        sort(candidates.begin(),candidates.end());        dfs(candidates,target,0,tmp,0);        return res;    }};`