随想录二刷Day27——回溯

文章目录

  • 回溯
    • 7. 组合总和
    • 8. 组合总和 II

回溯

7. 组合总和

39. 组合总和

思路:
基本的递归回溯,只不过这里递归树每层的起始索引位置变成了 i ,而不是下一个元素的索引 i+1,因为可以重复选择。
复杂度: O ( n 2 n ) O(n2^n) O(n2n) 每个数字都有是否被选择两种可能 2 n 2^n 2n,递归树的最大深度是 target / min(candidates) n n n.

class Solution {
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<int> tmp;sort(candidates.begin(), candidates.end()); // 对 candidates 升序排列,方便后续剪枝backward(tmp, 0, candidates, target);return ans;}private:vector<vector<int>> ans;void backward(vector<int>& tmp, int start, vector<int>& candidates, int target) {if (target == 0) {ans.push_back(tmp);return ;}for (int i = start; i < candidates.size(); i++) {if (target < candidates[i]) break; // 剪枝tmp.push_back(candidates[i]);backward(tmp, i, candidates, target - candidates[i]);tmp.pop_back();}}
};

8. 组合总和 II

40. 组合总和 II

思路:
这一题上一题的区别是多了不能重复的限制。
如下图,我们可以看出,重复的是蓝色的同一层的部分,而在棕色的分支处的重复数字不会引起结果的重复。
所以剪枝只需要剪掉同一层相同元素搜索得到的答案。即用 if (i > start && candidates[i] == candidates[i - 1]) continue; 将蓝色部分进行剪枝。
在这里插入图片描述

class Solution {
public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<int> tmp;sort(candidates.begin(), candidates.end());backward(tmp, 0, candidates, target);return ans;}private:vector<vector<int>> ans;void backward(vector<int> &tmp, int start, vector<int>& candidates, int target) {if (target == 0) {ans.push_back(tmp);return ;}for (int i = start; i < candidates.size(); i++) {// 剪枝if (target < candidates[i]) break;// 去重if (i > start && candidates[i] == candidates[i - 1]) continue;tmp.push_back(candidates[i]);backward(tmp, i + 1, candidates, target - candidates[i]);tmp.pop_back();}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker容器间网络共享

Docker容器间网络共享 1、新建网络2、容器绑定网卡3、验证 Docker环境中为了一套应用部署多个环境、并且不修改配置文件的情况下&#xff0c;做到一键部署。要求不同容器直接的网络交互&#xff0c;使用容器名称。 网络相关常用命令 #查看网络内部信息docker network inspect b…

eclipse中设置自动补齐代码

eclipse中设置自动补齐代码 01 在window里找到preference 02 在preference里搜索content assist 03 在Java的content assist设置 设置为.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 04 apply and close即可

Linux Python ping3库使用教程(ping3命令、ping命令)

文章目录 Linux Python ping3库使用教程1. 环境准备2. ping3库安装3. ping3基本使用4. ping3进阶使用5. 常见问题解答5.1 ping3库可以在Windows系统中使用吗&#xff1f;5.2 如何处理ping操作超时的情况&#xff1f;5.3 ping3库支持IPv6吗&#xff1f; Linux Python ping3库使用…

R文件详细介绍、瘦身

R 文件可能是很多 Android 开发者既熟悉又陌生的存在。它无处不在&#xff0c;所有使用到资源的地方都离不开它。它又有些陌生&#xff0c;google 已经把它封装的很完美了&#xff0c;以至于很多开发者并不知道它是怎么工作的。那么我们今天就来揭开它神秘的面纱。 R.id 这是一…

8.整数转换为浮点数【2023.11.30】

1.问题描述 整数转换为浮点数。 2.解决思路 使用input函数读取输入的整数 input_int int(input()) #将整数转换为浮点数类型 output_float float(input_int) 3.代码实现 numint(input("请输入一个整数")) num1float(num) print(num1)4.运行结果

GD32 定时器输入捕获模式测量PWM占空比和频率

简介 利用GD32 定时器的PWM输入捕获模式来实现PWM波形的占空比和频率的测量。相应的简介可以参考GD32用户手册中关于定时器输入捕获的章节&#xff0c;PWM输入捕获模式是输入捕获模式的一个特例。(记录自己学习过程&#xff0c;如有错误请留言指出) 原理 如何利用定时器测量…

VUE设计与实现共读系列之ref的实现【响应式原理】

前言 我们先顺一下vue使用响应式数据的流程&#xff1a; vue 是通过 ref 和 reactive 来创建响应式值&#xff0c;改变响应式值&#xff0c;视图跟着发生变化。 我们今天就来看一下ref和reactive是如何实现的 准备 首先&#xff0c;打开ref函数的位置 我们可以看到一个被re…

SmartSoftHelp8,SQL语句优化,耗时,返回数据行,kb

SQL语句优化 SQL语句耗时测试&#xff0c;耗时优化 SQL语句查询返回数据行统计 SQL语句查询返回数据大小统计&#xff0c;kb 总量统计 下载地址&#xff1a;https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888

施人玫瑰手留余香和影像组学、医学人工智能未来漫谈

今天收到进阶班学员的留言&#xff1a; 提示&#xff1a;本文有硬核软文嫌疑&#xff0c;请慎重阅读。“ 我用您给我们讲的CLEAR&#xff0c;与一个审稿人进行了battle。有理有据。评估下来&#xff0c;我感觉我们的文章还是挺符合CLEAR的。” 我从来不排斥在商言商&#xff0…

12月02日每日信息差

_灵感 &#x1f396; 六国入境免签首日2029人次享便利 &#x1f384; 国内首个超大规模“光伏气膜”项目在江苏投运 &#x1f30d; 东京将推出氢气交易市场 &#x1f30b; 中国疾控中心&#xff1a;建议尽早接种流感疫苗&#xff0c;尤其是老年人和儿童 &#x1f381; 偏高1.…

MySQL列操作记录

在 MySQL 中&#xff0c;你可以使用多种命令和语句来执行列操作&#xff0c;包括添加、修改、删除列等。以下是一些与列操作相关的常用 MySQL 命令和语句&#xff1a; 1. 添加列&#xff1a; 添加新列到表格中&#xff1a; ALTER TABLE table_name ADD COLUMN column_name d…

01_学习使用javax_ws_rs_上传文件

文章目录 1 前言2 Maven 依赖3 上传接口4 如何解析 MultipartFormDataInput5 结语 1 前言 使用 Spring MVC 来处理文件上传&#xff0c;想必是大家耳熟能详的了&#xff0c;如下代码&#xff1a; ResponseBody PostMapping("/upload") public String upload(Request…

【Qt开发流程】之事件系统1:事件系统描述及键盘事件

Qt的事件系统 在Qt中&#xff0c;事件是对象&#xff0c;派生自抽象的QEvent类&#xff0c;它表示应用程序内部发生的事情或作为应用程序需要知道的外部活动的结果。事件可以由QObject子类的任何实例接收和处理&#xff0c;但它们与小部件特别相关。以下描述了在典型应用程序中…

MATLAB算法实战应用案例精讲-【图像处理】数字图像处理(补充篇)

目录 算法原理 数字图像处理常用算法 1.二值化: 2.海报化 3.灰度化

基于ZLMediaKit的webrtc实时视频传输demo搭建

环境 ubuntu 20.04 ​ gcc version 9.4.0 ​ cmake version 3.16.3 部署ZLMediaKit流媒体服务器 安装openssl 首先可以检查一下自己的openssl的版本如果是1.1.1以上就可以忽略这一步 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar -xvzf openssl-1.1.1k…

【新论文】【模型攻击】DiffAttack 针对基于扩散的对抗性净化的逃避攻击

DiffAttack: Evasion Attacks Against Diffusion-Based Adversarial Purification 作者: Mintong Kang; Dawn Song; Bo Li 链接: http://arxiv.org/pdf/2311.16124v1 备注: Accepted to NeurIPS 2023 摘要: 基于扩散的净化防御利用扩散模型去除对抗样本的精心设计的扰动&#…

酷开科技 | 酷开系统,让家庭娱乐方式焕然一新!

在这个快节奏的社会&#xff0c;家庭娱乐已成为我们日常生活中不可或缺的一部分&#xff0c;为了给家庭带来更多欢笑与感动&#xff0c;酷开科技发力研发出拥有丰富内容和技术的智能电视操作系统——酷开系统&#xff0c;它集合了电影、电视剧、综艺、游戏、音乐等海量内容&…

我的2023年12月02日对文章发送的一个测试

1 Markdown.com.cn 简介 支持自定义样式的 Markdown 编辑器支持微信公众号、知乎和稀土掘金点击右上方对应图标&#xff0c;一键复制到各平台 2 Markdown语法教程 2.1 标题 不同数量的#可以完成不同的标题&#xff0c;如下&#xff1a; 一级标题 二级标题 三级标题 2.2…

C语言-指针_01

指针基础 1. 概述 地址编号&#xff1a;计算机为了存储数据&#xff0c;每一个程序在 32位 机中 占4G&#xff0c;最小操作单位 是 一个字节&#xff0c;每一个字节都有其对应的地址&#xff0c;该地址就是 地址编号。 指针&#xff1a;地址编号这个数据 的 数据类型。 指针变…

Java数组与List互换

asList():将数组转成list //将数组转换为listint[][] nums {{7,0},{4,4},{7,1},{5,0},{6,1},{5,2}};List<int[]> list new LinkedList<>(Arrays.asList(nums));for (int[] ints :list) {System.out.println(ints[0] " " ints[1]); //遍历list}toAr…