【问题】给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的数字可以无限制重复被选取。

说明:

  • 所有数字(包括 target)都是正整数。

  • 解集不能包含重复的组合。

    示例 :
    输入: candidates = [,,,], target = ,
    所求解集为:

    [
    [7],
    [2,2,3]
    ]
    示例 2:

    
    

    输入: candidates = [2,3,5], target = 8,
    所求解集为:
    [
    [2,2,2,2],
    [2,3,3],
    [3,5]
    ]

     

    【思路】

  • 首先我们要来考虑的是,dfs的参数,首先两个不变的参数candidates和target, 接着是两个可变的参数,一个用来计算我们搜索的组合的和sum,另外一个标记开始搜索的位置start。

    递归的退出条件:当sum >= target时,或者开始位置超出了candidate的边界
    由于题目中说,元素可以任意使用,但是组合不可以重复,因此我们需要注意:

    • 在dfs函数中for循环的开始值为start, 表示从某一位置开始,并不会使用此位置之前的值,避免出现[2,2,3], [2,3,2]这种重复的组合!也就是说组合必须为非减序列

    • 又因为元素可以重复使用,因此dfs在for循环调用时,i并没有加一!因此下一个子方法还是可以使用当前元素!

    • 注意d数组的状态,dfs结束后要将其状态恢复,然后才可以重复使用!

  • class Solution {
    vector<int> d;
    vector<vector<int> > res; private:
    void dfs(vector<int>& candidates, int sum, int target, int start){
    if(sum >= target || start == candidates.size()){
    if(sum == target)
    res.push_back(d);
    return;
    }
    for(int i = start;i < candidates.size();i++){ // 遍历从start开始,避免重复使用之前的值,造成重复
    d.push_back(candidates[i]); // 但每次进入函数都要从当前位置进入,可以使用重复值
    dfs(candidates, sum+candidates[i], target, i);
    d.pop_back();
    }
    } public:
    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
    sort(candidates.begin(), candidates.end());
    dfs(candidates, , target, );
    return res;
    }
    };

【LeetCode】组合总和的更多相关文章

  1. 图解Leetcode组合总和系列——回溯(剪枝优化)+动态规划

    Leetcode组合总和系列--回溯(剪枝优化)+动态规划 组合总和 I 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 ...

  2. leetcode组合总和 Ⅳ 解题路径

    题目: 关于动态规划类题目的思路如何找在上一篇博客 https://www.cnblogs.com/niuyourou/p/11964842.html 讲的非常清楚了,该博客也成为了了leetcode ...

  3. 34,Leetcode 组合总和I,II -C++ 回溯法

    I 题目描述 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合.candidates 中的数字可以无 ...

  4. LeetCode 组合总和(dfs)

    题目 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无限制重 ...

  5. Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III)

    Leetcode之回溯法专题-216. 组合总和 III(Combination Sum III) 同类题目: Leetcode之回溯法专题-39. 组合总数(Combination Sum) Lee ...

  6. Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II)

    Leetcode之回溯法专题-40. 组合总和 II(Combination Sum II) 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使 ...

  7. LeetCode刷题笔记-回溯法-组合总和问题

    题目描述: <组合总和问题>给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. cand ...

  8. Java实现 LeetCode 40 组合总和 II(二)

    40. 组合总和 II 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在 ...

  9. Java实现 LeetCode 39 组合总和

    39. 组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字 ...

  10. 【JavaScript】Leetcode每日一题-组合总和4

    [JavaScript]Leetcode每日一题-组合总和4 [题目描述] 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target .请你从 nums 中找出并返回总和为 targ ...

随机推荐

  1. Oracle笔记--Sql语句

    1.SQL的三种类型语句: --1)DML(Data Manipulation Language)数据操纵语言 --2)DDL(Data Definition Language):数据定义语言 --3 ...

  2. 关于pandas增加行时,索引名称的一些问题

    学习pandas两天了,关于这个增加行的问题一直困扰着我,测试了几个代码,终于搞通了一点(昨天是因为代码敲错了...) 直接上代码: dates = pd.date_range(',periods=6 ...

  3. 前端学习笔记系列一:4 vue中@click.native

    .native - listen for a native event on the root element of component. 作用:[给组件绑定原生事件] 例子:如果使用router-l ...

  4. 1-2SpringBoot项目属性配置

    前面我们讲解了SpringBoot HelloWorld实现 今天具体来讲解上那个application.properties项目配置文件 打开是空白 里面可以配置项目,所以配置项目我们 alt+/ ...

  5. Struts2出现的问题:

    HTTP 500: 在用通配符配置Method时候,action的形式固定,比如customer_*,那么只用一个Action类比如CustomerAction即可. 在配置的时候,不同的方法在同一个 ...

  6. 定时执行 Job【转】

    Linux 中有 cron 程序定时执行任务,Kubernetes 的 CronJob 提供了类似的功能,可以定时执行 Job.CronJob 配置文件示例如下: ① batch/v2alpha1 是 ...

  7. SQLyog连接报错 Error No.2058 Plugin caching_sha2_password could not be loaded

    参考链接:https://blog.csdn.net/qq_22766431/article/details/80628583 win10系统更新安装Mysql8.0,连接SQLyog的时候出现下面错 ...

  8. 面试题之xml解析?

    题目是:用java程序将xml中的数据保存到实体对象中,如何实现? xml如下: <?xml version="1.0" encoding="UTF-8" ...

  9. Oracle 中启用 scott 用户 的方法

    解锁scott: SQL> alter user scott account unlock 修改密码: SQL> alter user scott identified by tiger ...

  10. delphi日期GMT格式

    function TForm1.DateTimeToGMT(const DateTime: TDateTime): string;const WEEK: array[1..7] of PChar = ...