当前位置: 首页 > news >正文

组合总和

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

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

#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& num,int target,int sum,int startIndex)
{
    if(sum==target)
    {
        result.push_back(path);
        return ;
    }
    for(int i=startIndex;i<num.size()&&sum+num[i]<=target;i++)
    {
        path.push_back(num[i]);
        sum+=num[i];
        backtracking(num,target,sum,i);
        sum-=num[i];
        path.pop_back();
    }
}
vector<vector<int>> combine(vector<int>& num,int target)
{
    path.clear();
    result.clear();
    sort(num.begin(),num.end());
    backtracking(num,target,0,0);
    return result;
}
int main()
{
    vector<int> num={2,5,3};
    vector<vector<int>> t=combine(num,7);
    for(const auto& n:t)
    {
        for(int m:n)
        {
            cout<<m<<" ";
        }
        cout<<endl;
    }
    return 0;
 } 

思路:本题搜索的过程抽象成树形结构如下:

注意图中叶子节点的返回条件,因为本题没有组合数量要求,仅仅是总和的限制,所以递归没有层数的限制,只要选取的元素总和超过target,就返回!

二维数组result存放结果集,数组path存放符合条件的结果。

sum变量来统计单一结果path里的总和,从叶子节点可以清晰看到,终止只有两种情况,sum大于target和sum等于target。单层for循环依然是从startIndex开始,搜索candidates集合。

剪枝操作:对于sum已经大于target的情况,其实是依然进入了下一层递归,只是下一层递归结束判断的时候,会判断sum > target的话就返回。其实如果已经知道下一层的sum会大于target,就没有必要进入下一层递归了。

相关文章:

  • 理解 Node.js 中的 process`对象与常用操作
  • 系统思考—链接组织效能提升与问题解决
  • VideoHelper 油猴脚本,重塑你的视频观看体验
  • 51c~C++合集1
  • 【CSS文字渐变动画】
  • 无人机点对点技术要点分析!
  • xwiki自定义认证实现单点登录
  • XSS介绍通关XSS-Labs靶场
  • 分页优化之——游标分页
  • IREE 内存分配算法概述
  • 深入理解MySQL中的MVCC机制
  • 双一流软件工程大二听闻 Java 前景堪忧,是否该转C++或人工智能或者读研?
  • 数据驱动的业务智能与决策支持:从数据到智慧的进化之路
  • JDBC 操作 BLOB(二进制大对象)和 CLOB(字符大对象)的完整示例代码,包含 插入、读取 操作及详细注释
  • RocketMQ面试题:基础部分
  • G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门
  • 简易shell
  • Python深浅拷贝
  • mysql 查询进程查看并释放
  • 存储过程在高并发环境下的重要性
  • 观察|印巴交火开始升级,是否会演变为第四次印巴战争?
  • A股三大股指收涨:军工股掀涨停潮,两市成交近1.5万亿元
  • 吴清:创造条件支持优质中概股企业回归内地和香港股市
  • 马克思主义理论研究教学名师系列访谈|鲍金:给予学生一碗水、自己就要有一桶水
  • 金融监管总局:正在修订并购贷款管理办法,将进一步释放并购贷款的潜力
  • 五月A股怎么买?券商金股电子权重第一,格力电器最热