思路:dfs+回溯
class Solution {
public:
void dfs(vector<int>& candidates,int target,int sum,vector<vector<int>>& ans,vector<int>& path,vector<int>& id){
for(int i=id[id.size()-1];i<candidates.size();i++){
path.push_back(candidates[i]);
id.push_back(i);
int T = sum + candidates[i];
if(T < target) dfs(candidates,target,T,ans,path,id);
if(T == target) ans.push_back(path);
path.pop_back();
id.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
vector<vector<int>> ans;
vector<int> path;
vector<int> id;
id.push_back(0);
dfs(candidates,target,0,ans,path,id);
return ans;
}
};
本文介绍了一种使用深度优先搜索(DFS)和回溯技术解决组合总和问题的方法。通过递归地探索所有可能的路径,找到目标值的所有组合。首先对候选数进行排序,然后使用DFS进行搜索,同时记录路径和当前节点的ID,以避免重复计算。
909

被折叠的 条评论
为什么被折叠?



