问题
https://leetcode.com/problems/combination-sum/
解法
回溯法, 由于是要得到所有结果,如果使用dp求解,每一个状态都要存储可能到达自己的状态,内存开销太大。
class Solution {
public:
void dfs(vector<vector<int>> &ret, vector<int>& now, vector<int>& cand, int target, int i)
{
if (target == 0)
ret.push_back(now);
for (; i<cand.size(); i++)
{
if (target >= cand[i])
{
now.push_back(cand[i]);
dfs(ret, now, cand, target-cand[i], i);
now.pop_back();
}
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
vector<vector<int>> ret;
vector<int> now;
dfs(ret, now, candidates, target, 0);
return ret;
}
};