题目描述:
39. 组合总和
题解:
class Solution {
public:
// 搜索回溯
// 本题注意点:每个数字可以重复选择;
// Select函数(从candidates中选择target多,start为起始位置,temp当前结果,result最终的答案)
// 为了避免答案的重复,加了start,这样每次选择自己以及自己位置以后的数字
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> result;
vector<int> temp;
Select(candidates,target,0,temp,result);
return result;
}
void Select(vector<int>& candidates, int target,int start,vector<int>&temp,vector<vector<int>>&result){
// 说明temp组合符合要求
if(target==0){
result.push_back(temp);
return;
}
for(int i=start;i<candidates.size();i++){
if(candidates[i]<=target){// 可以选择
temp.push_back(candidates[i]); //选择
Select(candidates,target-candidates[i],i,temp,result);
temp.pop_back(); // 恢复temp
}
}
}
};