1. 题目
2. 算法
http://www.cnblogs.com/grandyang/p/4419259.html
http://www.cnblogs.com/ganganloveu/p/4167175.html
DFS:O(n!)
DFS 和回溯算法的区别
回溯搜索是深度优先搜索(DFS)的一种 对于某一个搜索树来说(搜索树是起记录路径和状态判断的作用),回溯和DFS,其主要的区别是,回溯法在求解过程中不保留完整的树结构,而深度优先搜索则记下完整的搜索树。
//
start:记录当前的递归的下标
out:是一个解
res:保存所有的解
3. 代码
class Solution{
public:
vector<vector<int> > combinationSum(vector<int>& candidates,int target){
vector<vector<int> > res;
vector<int> out;
sort(candidates.begin(),candidates.end());
combinationDFS(candidates,target,0,out,res);
return res;
}
private:
void combinationDFS(vector<int>& candidates,int target,int start,vector<int>& out,vector<vector<int> >& res){
if(target<0) return;
else if(target==0) res.push_back(out);
else{
for(int i=start;i<candidates;i++){
out.push_back(candidates[i]);
combinationDFS(candidates,target-candidates[i],i,out,res);
out.pop_back();
}
}
}
};