class Solution {
public:
vector<vector<int> > combinationSum(vector<int> &num, int target) {
vector<vector<int>> res;
vector<int> cur;
sort(num.begin(),num.end());
dfs(num,0,0,target,cur,res);
return res;
}
void dfs(vector<int> num,int sum,int pos,int target,vector<int> &cur,vector<vector<int>> &res){
if(sum==target){
res.push_back(cur);
return;
} //当前考虑第pos个数
if(sum > target)
return ;
//每一步选第几个值
for(int i=pos;i<num.size();i++){ //每一层只能选一个,所以包含回溯操作
cur.push_back(num[i]);
dfs(num,sum+num[i],i,target,cur,res);
cur.pop_back();
}
}
};
LeetCode combination sum ,每个数可以使用多次,dfs
最新推荐文章于 2019-09-15 10:25:14 发布