搜就完事了,没想着优化。唉~太菜,给一个位置标记位置,然后通过该位置向该位置及该位置以下寻找,这样不存在什么重复回去查找问题。
如果总结大于目标值,回溯一下,如果不大于继续。
class Solution { public: vector<vector<int>> res; vector<int> temp; vector<vector<int>> combinationSum(vector<int>& candidates, int target) { dfs(candidates,0,target,0); return res; } void dfs(vector<int> can,int sum,int tag,int start) { if(sum>tag)return; else if(sum==tag) { res.push_back(temp); return;} else for(int i=start;i<can.size();i++) { temp.push_back(can[i]); dfs(can,sum+can[i],tag,i); temp.pop_back(); } } };
原文:https://www.cnblogs.com/biubiuWham/p/10463393.html