从头做leetcode之leetcode 39 组合总和

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)