Leetcode刷题笔记题解(C++):39. 组合总和

Leetcode刷题笔记题解(C++):39. 组合总和_第1张图片

思路:此题的要求是每个数可以重复使用,那可以深度优先处理,分两种情况向下走

1.当前元素要用

2.当前元素不用,直接跳转至下一元素

截止条件是: 数组中的元素都已经用过了且最后一个元素加入满足或者不满足为止

用target的值来标定是否成立,加入一个元素,则target的值减去该元素的值,如果target=0的时候则满足输出结果中

代码如下:

class Solution {
public:
    vector>res;//用于保存结果
    vector> combinationSum(vector& candidates, int target) {
        vectortemp;
        dfs(candidates,temp,target,0);
        return res;
    }

    void dfs(vector& candidates,vector &temp,int target,int index){
        //如果所有的数都选完了
        if(index==candidates.size()){
            return ;
        }
        //如果当前temp中的数之和==target则压入
        if(target==0){
            res.push_back(temp);
            return;
        }
        // 直接跳过
        dfs(candidates,temp,target,index + 1);

        // 选择当前数
        if (target - candidates[index] >= 0) {
            temp.push_back(candidates[index]);
            dfs(candidates, temp,target - candidates[index], index);
            temp.pop_back();
        }
    }
};

 

你可能感兴趣的:(Leetcode算法题解,c++,算法,数据结构,深度优先遍历)