从头做leetcode之leetcode 39 组合总和

39.组合总和 【从头做leetcode之leetcode 39 组合总和】给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的数字可以无限制重复被选取。
说明:
所有数字(包括 target)都是正整数。
解集不能包含重复的组合。

  • 用DFS的思想回溯
  • 用一个一维数组保存当前结果,只不过是下一次的起始位置是原地,而不是后一个。
class Solution { public: vector> combinationSum(vector& candidates, int target) { vector> res; vector ass; DFS(res,candidates,target,ass, 0, 0); return res; } void DFS(vector > &res,vector& candidates,int target,vector& ass, int sum,int position){ if(sum == target){ res.push_back(ass); } else{ for(int i=position; i < candidates.size(); i++){ if(sum+candidates[i]<=target){ ass.push_back(candidates[i]); DFS(res,candidates,target,ass,sum+candidates[i], i); ass.pop_back(); } } } } };

通过时间:
从头做leetcode之leetcode 39 组合总和
文章图片

    推荐阅读