39. 组合总和

解题思路

参考代码随想录

1.跟之前组合求和不同的一点是这里允许同一个数字使用多次,在代码中递归中有体现。
2.for循环是从选择集中遍历所有元素选择元素;处理过程是对sum求和、path添加元素;递归是往深度探索;回溯与处理过程一一对应。
3.这里一个剪枝操作是在for循环的条件语句中加的预判断,如果sum加上当前位置对应的候选元素小于等于目标值target,则需要进行处理递归回溯操作,否则没必要进行。

作者:jasscical
链接:https://leetcode-cn.com/problems/combination-sum/solution/39zu-he-zong-he-by-jasscical/

class Solution {
public:vector<vector<int>> res; //总结果vector<int> path; //子结果集void backtracking(vector<int>& candidates, int sum, int target, int startIndex){if(sum > target) return;if(sum == target){res.push_back(path);    //往深度探索,得到一条符合的路径return;}for(int i=startIndex; i<candidates.size() && candidates[i]+sum<=target; i++){ //条件进行了剪枝sum += candidates[i]; //处理path.push_back(candidates[i]); //处理backtracking(candidates, sum, target, i); //递归,允许同一个数字使用多次,所以传入的是i,之前的题目是传入i+1sum -= candidates[i]; //回溯path.pop_back(); //回溯}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {res.clear();path.clear();sort(candidates.begin(), candidates.end()); //先排序,对剪枝有帮助backtracking(candidates, 0, target, 0);return res;}
};

(回溯_04)组合总和相关推荐

  1. [回溯系列] 组合总和+电话号码(day25)

    LC216 组合总和3 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 1. 只使用数字1到9:2. 每个数字 最多使用一次. 返回所有可能的有效组合的列表 .组合可以以任何顺序返回 c ...

  2. 回溯-LeetCode77. 组合(Python)

    1.题目描述 https://leetcode-cn.com/problems/combinations/ 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 输入: n ...

  3. 求n个数中第k大的数_互联网高频面试题目:「回溯算法」求组合总和

    我将算法学习相关的资料已经整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面还有leetcode刷题攻略.各个类型经典题 ...

  4. [力扣leetcode39]组合总和及回溯法

    [力扣leetcode39]组合总和及回溯法 回溯yyds 小练习 回溯yyds 在算法优化上面回溯法或许没有那么引人注意,但是对于一些题目来说能够回溯已经很好了. 题目:给定一个无重复元素的数组 c ...

  5. LeetCode 216. 组合总和 III(排列组合 回溯)

    1. 题目 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: 所有数字都是正整数. 解集不能包含重复的组合. 示例 1: 输 ...

  6. LeetCode 40. 组合总和 II(排列组合 回溯)

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

  7. 【LeetCode】【HOT】39. 组合总和(回溯)

    [LeetCode][HOT]39. 组合总和 文章目录 [LeetCode][HOT]39. 组合总和 package hot;import java.util.ArrayList; import ...

  8. 本题要求实现一个求整数的逆序数的简单函数。_回溯算法:求组合总和(二)...

    给「代码随想录」一个星标吧! ❝ 我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便大家在 ...

  9. 【算法】回溯算法+进阶题——全排列Ⅱ、组合总和Ⅱ、解数独

    目录 一.前言 • 什么是回溯算法 • 用回溯能解决那些题型 二.总体思路 1. 通过树逐层解剖 2. 代码框架 3. 是否需要去重 三.例题 1. 组合总和Ⅱ 2. 全排列Ⅱ 3. 解数独 一.前言 ...

最新文章

  1. 为什么只有奇次谐波_我们为什么要用UPS不间断电源?
  2. 86. 分隔链表 golang
  3. LeetCode-Spiral Matrix-螺旋矩阵
  4. c语言给定一个字符串匹配,使用C语言解决字符串匹配问题的方法
  5. pytorch AUTOGRAD
  6. 进程和线程的区别【转】
  7. SpringMVC的原理
  8. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(六)功能块、子程序
  9. 【ES实战】ES-Hadoop中的配置项说明
  10. 企业内部报表生成思路
  11. 电脑版微信怎么双开、多开
  12. 【C/C++服务器开发】什么是服务器?服务器分类及构建一个简单的服务器系统
  13. Visual Studio 插件番茄助手2个优秀的特性
  14. 安卓,加密drawable图像资源、从类文件生成drawable
  15. 二进制、八进制、十六进制的转换
  16. “科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 F.排列计算
  17. Aria2+motrix设置教程
  18. 采购订单和 采购申请 的表
  19. Word交叉输入汉字和英文间距变大
  20. mvc mysql连接字符串_mvc与sql连接数据库

热门文章

  1. 程序员的自我修养_之二_曾国藩的“大悔大悟”
  2. 网页设计(三)——JavaScript
  3. TensorRT(7):python版本使用入门
  4. C语言中常见的转义字符总结
  5. 【赛鱼电竞】用王者荣耀免费改名卡改名和王者荣耀怎么修改昵称及王者荣耀改名卡免费修改昵称方法教程
  6. 计算机速度由CPU决定,电脑CPU的计算速度由什么决定
  7. Golang Http RoundTrip解析
  8. faster rcnn 代码与原理结合详解
  9. 成为软件工程师之前,你必须了解这些
  10. Linux chmod +755和chmod +777 各是什么意思呢?