day27 回溯(03)

day27
代码随想录
2023.12.25

1. 39组合总和
这道题还是组合问题,一样的代码套路,不过就是递归参数不同,数组元素可以重复,所以是i而不是i+1;其次就是终止条件,当temp的sum大于target则终止,当等于时则加入到result中;
越来明白回溯本质就是穷举了,就是试探所有可能得组合,等有满足要求的,添加到结果中即可。

class Solution {
public:vector<vector<int>> result;vector<int> temp;vector<vector<int>> combinationSum(vector<int>& candidates, int target) {backtravel(candidates, target, 0);return result;}void backtravel(vector<int>& candidates, int target, int index){int sum=0;for(int i=0;i<temp.size();i++){sum += temp[i];}if(sum>target)return;if(sum==target){result.push_back(temp);return;}for(int i=index;i<candidates.size();i++){temp.push_back(candidates[i]);backtravel(candidates,target,i);temp.pop_back();}}
};

2. 40组合总和Ⅱ
乍一看以为一样,细看后发现,首先,不允许重复使用,所以递归参数是i+1,其次也是本题的关键,数组中会出现重复数字,但是结果不允许出现重复,因此在第一层递归中,遇到相同的值就要越过,这里要注意是递归中,该层相同的要跳过,如果是深度往下递归值相同,则不用跳过,在开始对数据进行排序,这样相同值就相邻了,然后递归判断前后相同不,相同就跳过,

class Solution {
public:vector<vector<int>> result;vector<int> temp;vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {sort(candidates.begin(), candidates.end());backtravel(candidates, target, 0);return result;}void backtravel(vector<int>& candidates, int target, int index){int sum=0;for(int i=0;i<temp.size();i++){sum += temp[i];}if(sum>target)return;if(sum==target){result.push_back(temp);return;}for(int i=index;i<candidates.size();i++){if (i > index && candidates[i] == candidates[i - 1]) {continue;}temp.push_back(candidates[i]);backtravel(candidates,target,i+1);temp.pop_back();}}
};

在跳过相同的判断中i>index就是将同层没有相同的,如果是i>0,则是将所有相同元素都越过了

3. 131分割回文子串

class Solution {
public:bool isPalindrome(const string& s, int start, int end) {for (int i = start, j = end; i < j; i++, j--) {if (s[i] != s[j]) {return false;}}return true;}vector<vector<string>> result;vector<string> temp;vector<vector<string>> partition(string s) {backtravel(s,0);return result;}void backtravel(string& s, int index){if (index == s.size()) {result.push_back(temp);return;}for (int i = index; i < s.size(); i++) {if (isPalindrome(s, index, i)) {temp.push_back(s.substr(index, i - index + 1));backtravel(s, i + 1);temp.pop_back();}}}
};

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

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

相关文章

gitlab请求合并分支

直接去看原文: 原文链接:Gitlab合并请求相关流程_source branch target branch-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 入口&#xff1a; 仓库控制台的这两个地方都…

Android集成OpenSSL实现加解密-编译

下载 OpenSSL 源码&#xff1a; 前往 OpenSSL 官方网站&#xff08;https://www.openssl.org/source/&#xff09;下载最新的源码压缩包并解压&#xff0c;示例在WSL环境编译 下载NDK 前往https://developer.android.google.cn/ndk/downloads?hlzh-cn下载NDK版本并解压 配置…

26、商城系统(八):nexus配置,拆分springcloud为多个springboot,并且实现多个springboot通过feign调用接口

目录 一、如果你是技术部经理 二、nexus:maven仓库的创建以及上传拉取jar包 1.docker安装nexus

OCP NVME SSD规范解读-3.NVMe管理命令-part1

4.4 NVMe Admin Command Set章节详细介绍了设备应支持的NVMe管理命令集&#xff0c;包括必需的和可选的命令。以下是一些关键要求和描述&#xff1a; NVMe-AD-2&#xff1a;识别命令除了支持所有必需的CNS值和相关的必需字段外&#xff0c;还应支持以下可选字段&#xff1a; 格…

电子设计从零开始(2)-----走进电子技术之电阻器

同学们大家好&#xff0c;今天我们继续学习杨欣的《电子设计从零开始》&#xff0c;这本书从基本原理出发&#xff0c;知识点遍及无线电通讯、仪器设计、三极管电路、集成电路、传感器、数字电路基础、单片机及应用实例&#xff0c;可以说是全面系统地介绍了电子设计所需的知识…

JavaScript----循环语句

1. 循环语句的介绍 循环语句就是让一部分代码重复执行&#xff0c;javascript中常用的循环语句有: forwhiledo-while 2. for循环 var array [1, 4, 5];for(var index 0; index < array.length; index){result array[index];alert(result); }3. while循环 var array …

软件测试/测试开发丨接口测试学习笔记分享

一、Mock 测试 1、Mock 测试的场景 前后端数据交互第三方系统数据交互硬件设备解耦 2、Mock 测试的价值与意义 不依赖第三方数据节省工作量节省联调 3、Mock 核心要素 匹配规则&#xff1a;mock的接口&#xff0c;改哪些接口&#xff0c;接口哪里的数据模拟响应 4、mock实…

OpenAI 2024年展望:Sam Altman愿望清单的深度解析

引言 Sam Altman 2023年11月22日 重回OpenAI 任CEO。 Sam Altman 2023年12月24日 发布新年需求统计。 OpenAI是一个美国人工智能研究实验室&#xff0c;由非营利组织OpenAI Inc&#xff0c;和其营利组织子公司OpenAI LP所组成。OpenAI 进行 AI 研究的目的是促进和发展友好的人…

听GPT 讲Rust源代码--src/tools(30)

File: rust/src/tools/clippy/clippy_lints/src/casts/cast_slice_from_raw_parts.rs 在Rust源代码中&#xff0c;cast_slice_from_raw_parts.rs文件位于rust/src/tools/clippy/clippy_lints/src/casts/目录下&#xff0c;它是Clippy工具中的一个lint&#xff0c;用于检查通过f…

centos7安装nginx并安装部署前端

目录&#xff1a; 一、安装nginx第一种方式&#xff08;外网&#xff09;第二种方式&#xff08;内网&#xff09; 二、配置前端项目三、Nginx相关命令 好久不用再次使用生疏&#xff0c;这次记录一下 一、安装nginx 第一种方式&#xff08;外网&#xff09; 1、下载nginx ng…

《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

下文是阅读《深入理解Java虚拟机&#xff08;第3版&#xff09;》这本书的读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 第2章 Java内存区域与内存溢出异常2.2 运行时数据区域2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与内存分配策略3.2 对象已死&…

1.2.3 TCP/IP参考模型

一、OSI参考模型与TCP/IP参考模型 1、应用层&#xff1a;将表示层和会话层都纳入其中&#xff0c;形成一个比较大的层次&#xff0c;包含所有的高层协议 2、传输层&#xff1a;实现端到端的&#xff0c;进程与进程之间的通信。 3、网际层&#xff1a;TCP/IOP模型中最关键的部…

【Unity动画系统】Unity动画系统Animation详解,参数细节你是否弄清?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

STM32 学习(一)新建工程

本课程使用的stm32型号 引脚定义&#xff0c;有FT能接5v&#xff0c;没有FT能接3.3v 启动配置 第二种启动模式中&#xff0c;系统存储器中存放了一部分Bootloader程序&#xff0c;该程序可以接收串口的数据&#xff0c;然后刷新到主闪存中&#xff0c;这样就可以使用串口下载程…

Unity简单的敌人巡逻方法(NavMeshAgent)

简单的敌人巡逻方法 基于NavMeshAgent的敌人巡逻方法。 private NavMeshAgent eagent;//定义一个寻路private Animator animator;//声明一个动画public Vector3 [] point;//巡逻范围和位置数量private int index;//数组位置private float timer 0 ;void Start(){animator Ge…

c语言-位操作符练习题

文章目录 前言一、n&(n-1)的运用场景(n为整数)二、&1 和 >>的应用场景总结 前言 本篇文章介绍利用c语言的位操作符解决一些练习题&#xff0c;目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符 操作符含义&按位与|按位或^按位异或~按位…

k8s的二进制部署和网络类型

k8s的二进制部署 master01&#xff1a;192.168.233.10 kube-apiserver kube-controller-manager kube-scheduler etcd master02&#xff1a;192.168.233.20 kube-apiserver kube-controller-manager kube-scheduler node01&#xff1a;192.168.233.30 kubelet kube-proxy etc…

在idea中使用git(Gitee)

目录 前言 一、常用远程仓库托管服务 二、gitee使用 1 创建远程仓库 2 配置SSH公钥 ​编辑 ​编辑 3 把本地代码推送到远端 4 其他操作远程仓库 1&#xff09;克隆 2&#xff09;抓取和拉取 3&#xff09;解决合并冲突 三、在idea中使用git 四、场景分析 总结 前言 昨天详细学…

【惠友小课堂】“拇外翻”:大脚趾凸出也是病!得治!

大脚趾凸出的痛谁懂&#xff1f; 有一种尴尬叫不敢脱鞋&#xff0c; 鞋一脱&#xff0c;外翻的脚趾就“原形毕露”…… 这都是“拇外翻”惹的祸。 拇外翻&#xff0c;俗称大脚骨&#xff0c;多发于女性&#xff0c;是大脚趾向外明显倾斜&#xff0c;超过正常生理范围的一种足…

浅谈C4模型

C4模型&#xff08;C4 Model&#xff09;是一种用于描述软件系统架构的轻量级模型&#xff0c;其目标是通过简化、清晰和易于理解的方式来表达系统的不同层次的架构信息。C4代表了“上下文”&#xff08;Context&#xff09;、“容器”&#xff08;Container&#xff09;、“组…