【算法与数据结构】39、LeetCode组合总和
文章目录
- 一、题目
- 二、解法
- 三、完整代码
所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。
一、题目

二、解法
思路分析:这道题当中数字可以多次使用,那么我们在递归语句当中不能直接找下一个candidate的元素,需要不断累加重复元素,直到它>=target,才能进入下一个循环,同时需要做剪枝优化,循环只在这个条件下进行sum+candidates[i] <= target。这道题的框架基于【算法与数据结构】216、LeetCode组合总和 III修改。

程序如下:
class Solution {
private:vector<vector<int>> result; // 结果合集vector<int> path;void backtracking(const vector<int>& candidates, const int target, int sum, int startIndex) {if (sum > target) return; // 剪枝if (sum == target) {result.push_back(path);return;}for (int i = startIndex; i < candidates.size() && sum+candidates[i] <= target; i++) { // 剪枝优化sum += candidates[i];path.push_back(candidates[i]); // 处理节点backtracking(candidates, target, sum, i); // 递归sum -= candidates[i];path.pop_back(); // 回溯,撤销处理的节点}}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<int> nums = candidates; // 对candidates数组升排序sort(nums.begin(), nums.end());backtracking(nums, target, 0, 0);return result;}
};
复杂度分析:
- 时间复杂度: O ( n ∗ 2 n ) O(n*2^n) O(n∗2n)。
- 空间复杂度: O ( t a r g e t ) O(target) O(target)。
三、完整代码
# include <iostream>
# include <string>
# include <vector>
# include <algorithm>
using namespace std;class Solution {
private:vector<vector<int>> result; // 结果合集vector<int> path;void backtracking(const vector<int>& candidates, const int target, int sum, int startIndex) {if (sum > target) return; // 剪枝if (sum == target) {result.push_back(path);return;}for (int i = startIndex; i < candidates.size() && sum+candidates[i] <= target; i++) { // 剪枝优化sum += candidates[i];path.push_back(candidates[i]); // 处理节点backtracking(candidates, target, sum, i); // 递归sum -= candidates[i];path.pop_back(); // 回溯,撤销处理的节点}}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<int> nums = candidates; // 对candidates数组升排序sort(nums.begin(), nums.end());backtracking(nums, target, 0, 0);return result;}
};int main() {vector<int> candidates = { 2, 3, 6, 7 };int target = 7;Solution s1;vector<vector<int>> result = s1.combinationSum(candidates, target);for (vector<vector<int>>::iterator it = result.begin(); it != result.end(); it++) {for (vector<int>::iterator jt = (*it).begin(); jt != (*it).end(); jt++) {cout << *jt << " ";}cout << endl;}system("pause");return 0;
}
end
相关文章:
【算法与数据结构】39、LeetCode组合总和
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:这道题当中数字可以多次使用,那么我们在递归语句当中不能直接找下一个candidate的元素&…...
行政大厅满意度调查内容
行政大厅满意度调查的内容应该涵盖各个方面,以全面了解公众对行政大厅服务的满意度和意见。以下是可能包含在行政大厅满意度调查中的内容: 服务态度: 行政大厅工作人员的友好程度和专业水平。是否受到尊重和礼貌的待遇。 办事效率…...
WordPress页脚配置备案号
进入后台管理页面 后台管理页面地址一般是:域名/wp-admin 在指定位置加入代码 点击外观 -> 主题文件编辑器 在右侧的文件中选择 footer.php,[注意:上方的主题需要是你自己选择的对应的主题]在 </footer>标签这一行的上一行中加入代码 <di…...
时间序列预测模型实战案例(十)(个人创新模型)通过堆叠CNN、GRU、LSTM实现多元预测和单元预测
本文介绍 本篇博客为大家讲解的是通过组堆叠CNN、GRU、LSTM个数,建立多元预测和单元预测的时间序列预测模型,其效果要比单用GRU、LSTM效果好的多,其结合了CNN的特征提取功能、GRU和LSTM用于处理数据中的时间依赖关系的功能。通过将它们组合在…...
【有源码】基于uniapp的农场管理小程序springboot基于微信小程序的农场检测系统(源码 调试 lw 开题报告ppt)
💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…...
商城系统分布式下单
一、锁定库存的sql select * from ware where id{id} and total-lock>0 update ware set locklock{num} where id{id} and total-lock>{num} 二、下单服务要用分布式事务,因为seat的二阶段提交要说很多资源,会造成处理变成串行化,高并发…...
Java自学第5课:Java web开发环境概述,更换Eclipse版本
1 Java web开发环境 前面我们讲了java基本开发环境,但最终还是要转到web来的,先看下怎么搭建开发环境。 这个图就是大概讲了下开发和应用环境,其实很简单,对于一台裸机,win7 系统的,首先第1步,…...
[网鼎杯 2020 青龙组]AreUSerialz
[网鼎杯 2020 青龙组]AreUSerialz <?phpinclude("flag.php");highlight_file(__FILE__);class FileHandler {protected $op;protected $filename;protected $content;function __construct() {$op "1";$filename "/tmp/tmpfile";$content…...
使用Kotlin与Unirest库抓取音频文件的技术实践
目录 摘要 一、Kotlin与Unirest库概述 二、使用Kotlin和Unirest抓取音频文件 1、添加Unirest依赖 2、发送HTTP请求获取音频文件 3、保存音频文件 三、完整代码示例 四、注意事项 结论 摘要 本文详细阐述了如何使用Kotlin编程语言与Unirest库抓取网络上的音频文件。首…...
gdb调试常用命令
基本命令 1)进入GDB #gdb test test是要调试的程序,由gcc test.c -g -o test生成。进入后提示符变为(gdb) 。 2)查看源码 (gdb) l 源码会进行行号提示。 如果需要查看在其他文件中定义的函数,在l后加上函数名即可定位到这…...
CH11_重构API
将查询函数和修改函数分离(Separate Query from Modifier) function getTotalOutstandingAndSendBill() {const result customer.invoices.reduce((total, each) > each.amount total, 0);sendBill();return result; }function totalOutstanding() …...
UPLOAD-LABS1
less1 (js验证) 我们上传PHP的发现不可以,只能是jpg,png,gif(白名单限制了) 我们可以直接去修改限制 在查看器中看到使用了onsubmit这个函数,触发了鼠标的单击事件,在表单提交后马上调用了re…...
WordPress相关文章推荐
首先 WordPress 本身并没有相关文章的推荐功能,网站之所以需要这样的功能出于两个原因,一方面是推荐相关的内容越优质,访客的留存和继续阅读将会增强,同样从优化角度来说会更加有利于搜索引擎抓取时对页面质量的提升,毕…...
【QML】Qt和QML获取操作系统类型
1. Qt获取系统类型 //方法 QSysInfo::productType()//举例: if(QSysInfo::productType() "windows") {qDebug() << "windows system"; }官方说明: [static] QString QSysInfo::productType() Returns the product name of …...
CSS 显示、定位、布局、浮动
一、CSS 显示: CSS display属性设置元素应如何显示;CSS visibility属性指定元素应可见还是隐藏。隐藏元素可以通过display属性设置为“none”,也可以通过visibility属性设置为“hidden”。两者的区别:visibility:hidden可以隐藏某…...
Java 学习笔记
文章目录 一、集合1.1 List1.1.1 ArrayList1.1.2 Vector1.1.3 LinkedList 1.2 Deque1.3 Set1.4 Map1.4.1 HashMap1.4.2 LinkedHashMap 1.5 注意事项 二、函数式接口和 Lambda 表达式三、方法引用3.1 静态方法引用3.2 实例方法引用3.2 特定类型的方法引用3.4 构造器引用 四、Str…...
项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet
1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面,让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…...
Go语言函数参数
文章目录 Go语言函数参数1. **函数参数的定义**:2. **参数的数量**:3. **参数的数据类型**:4. **参数的命名**:5. **参数的传递**:6. **参数的传递方式**:7. **空白标识符**: Go语言函数参数 在…...
【遍历二叉树的非递归算法,二叉树的层次遍历】
文章目录 遍历二叉树的非递归算法二叉树的层次遍历 遍历二叉树的非递归算法 先序遍历序列建立二叉树的二叉链表 中序遍历非递归算法 二叉树中序遍历的非递归算法的关键:在中序遍历过某个结点的整个左子树后,如何找到该结点的根以及右子树。 基本思想&a…...
数模之线性规划
线性规划 优化类问题:有限的资源,最大的收益 例子: 华强去水果摊找茬,水果摊上共3个瓜,华强总共有40点体力值,每劈一个瓜能带来40点挑衅值,每挑一个瓜问“你这瓜保熟吗”能带来30点挑衅值,劈瓜消耗20点体力值,问话消耗…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
五、jmeter脚本参数化
目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...
Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...
使用 uv 工具快速部署并管理 vLLM 推理环境
uv:现代 Python 项目管理的高效助手 uv:Rust 驱动的 Python 包管理新时代 在部署大语言模型(LLM)推理服务时,vLLM 是一个备受关注的方案,具备高吞吐、低延迟和对 OpenAI API 的良好兼容性。为了提高部署效…...
Unity-ECS详解
今天我们来了解Unity最先进的技术——ECS架构(EntityComponentSystem)。 Unity官方下有源码,我们下载源码后来学习。 ECS 与OOP(Object-Oriented Programming)对应,ECS是一种完全不同的编程范式与数据架构…...
c++算法学习3——深度优先搜索
一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略,其核心思想是: 深度优先:从起点出发,选择一个方向探索到底,直到无路可走 回溯机制:遇到死路时返回最近…...
