1. recursiva retroceso +
En primer lugar, hay tres cosas que debe recordar con claridad:
1) no hay repetición de elementos en el array
2) una matriz digital puede ser repetido selección ilimitada
3) conjunto de soluciones no puede contener combinaciones duplicadas
Código es el siguiente:
class Solution {
vector<vector<int>> res;
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
//递归+回溯
vector<int> ans;
getSum(candidates,ans,0,target);
return res;
}
void getSum(vector<int>&c,vector<int> &ans,int index,int target)
{
if(target==0)
{
res.push_back(ans);
return ;
}
if(target<0)
{
return ;
}
for(int i=index;i<c.size();i++)
{
ans.push_back(c[i]);
getSum(c,ans,i,target-c[i]);
ans.pop_back();
}
}
};