代码随想录 day 26

回溯

组合总和
题意:一个无重复元素的整数数组;一个目标整数target; 找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ;并以列表形式返回。candidates 的同一个数字可以无限制重复被选取。
思路:因为同一个元素可以无限制重复地被选取。所以startidx 可以是相同的(重复选取)。
核心代码:

void backtracking(vector<int>& candidates, int sum_ , int startidx)
    {
        if(target_ == sum_)
        {
            // cnt ++ ;
            res.push_back(re) ; 
            return ; 
        }
        if(sum_> target_ ) // 并且减多了也要返回没有料到   。   
        {
            return ; 
        }
        // 剪枝一般在遍历剪
        //  如果 下一层相加的和 大于 target 就减掉 。
        // i是遍历树层的节点  i= 0 是第一个节点,i = 1 是第2个节点 。 i = 3 是第三个节点
        for(int i = startidx ; i< candidates.size()  && sum_ + candidates[i] <= target_ ; ++ i)
        {
            sum_ += candidates[i] ;
            re.push_back(candidates[i]) ; 
            backtracking(candidates , sum_ , i ) ; // 同一个数字可以被无限选取。 从i开始startidx 没有料到 ; 
            re.pop_back() ;  
            sum_ -= candidates[i] ; 
        }
    }

组合总和II
题意:给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidate只用一次。
思路:是从candidates 中找到数使得和为target ; 同一层的元素相同的元素使用过的, 要把其给去重掉。所谓去重,其实就是使用过的元素不能重复选取。 所以我们要去重的是同一树层上的“使用过”,同一树枝上的都是一个组合里的元素,不用去重。
在这里插入图片描述
为什么used[i-1] = false 是同一树层的呢,因为同一树层,used[i-1] = false 才能表示,当前取的candidate[i]是从candidate[i-1] 回溯而来的。 used[i-1] = true 是进入下一层递归的树 ;
在这里插入图片描述
单层递归的逻辑

for (int i = startIndex; i < candidates.size() && sum + candidates[i] <= target; i++) {
    // used[i - 1] == true,说明同一树枝candidates[i - 1]使用过
    // used[i - 1] == false,说明同一树层candidates[i - 1]使用过
    // 要对同一树层使用过的元素进行跳过
    if (i > 0 && candidates[i] == candidates[i - 1] && used[i - 1] == false) {
        continue;
    }
    sum += candidates[i];
    path.push_back(candidates[i]);
    used[i] = true;
    backtracking(candidates, target, sum, i + 1, used); // 和39.组合总和的区别1:这里是i+1,每个数字在每个组合中只能使用一次
    used[i] = false;
    sum -= candidates[i];
    path.pop_back();
}

分割回文串
题意:是给一个字符串s,将s分割成一些子串,使这些子串都是回文串。 返回 s 所有可能的分割方案。
思路:树的每个节点要做的就是切割子串。把子串收集好,切割完毕之后才做这次判断。 回溯三部曲:1.返回类型为void , 参数因为下次递归要从startidx开始,所以需要传入startidx; 递归边界:切割线大于串的长度就是返回的时候。递归体 默写:for(int i = startidx; i < s.size() ; ++ i ) { re.push_back() ; // 切割的子串 ; backtracking(s , i+1) ; re.pop_back() ; }
核心代码

 void backtracking(string s  , int startidx )  
    {
        if(startidx>= s.size())
        {
            int flag = 0 ; 
            for(auto it : re)
            {
               if(!judge(it))
               {
                    flag =1; 
                    break  ;
               }
            }
            // cout<<endl; 
            if(flag == 0 )
            res.push_back(re) ; 
            return  ; 
        }
        for(int i = startidx ; i<s.size() ; ++ i )
        {
            
            // int delim = i+1 ;  // 左闭右开切割。 

            re.push_back(s.substr(startidx, i- startidx+1  )) ; // 要把分割的串加入到re 中,最后统一处理; 判断是否是回文串。 
            // pre = delim ;   
            backtracking(s , i + 1 ) ;  // i+1 
            re.pop_back() ; 
            // pre = i ; 
        }
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

半导体光子电学期末笔记2: 光子晶体 Photonic crystals

光子晶体概述 光子晶体定义和分类 [P4-5] 光子晶体是一种在一维、二维或三维空间内周期性排列的多层介质。这些结构通过在光子尺度上排列的重复单元&#xff0c;可以对光进行调控和控制。具体来说&#xff0c;光子晶体是指那些在空间上具有周期性排列的介质结构&#xff0c;它…

文心一言 VS 讯飞星火 VS chatgpt (273)-- 算法导论20.2 8题

八、假设设计了这样一个 proto-vEB 结构&#xff0c;其中每个簇数组仅有 u 1 4 u^\frac{1}{4} u41​ 个元素。那么每个操作的运行时间是多少&#xff1f;如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 如果你修改了 van Emde Boas (vEB) 树中的簇大小&#xf…

贪心算法题实战详解

文章目录 例题1&#xff1a;活动安排问题例题2&#xff1a;货币找零问题例题3&#xff1a;分数背包问题&#xff08;部分背包问题&#xff09;例题4&#xff1a;最小生成树问题&#xff08;Prim算法&#xff09;例题5&#xff1a;哈夫曼编码例题6&#xff1a;活动选择问题例题7…

KAN(Kolmogorov-Arnold Network)的理解 3

系列文章目录 第一部分 KAN的理解——数学背景 第二部分 KAN的理解——网络结构 第三部分 KAN的实践——第一个例程 文章目录 系列文章目录前言KAN 的第一个例程 get started 前言 这里记录我对于KAN的探索过程&#xff0c;每次会尝试理解解释一部分问题。欢迎大家和我一起讨…

Spring 之 Lifecycle 及 SmartLifecycle

最近在看Eureka源码&#xff0c;本想快速解决这场没有硝烟的战役&#xff0c;不曾想阻塞性问题一个接一个。为正确理解这个框架&#xff0c;我不得不耐着性子&#xff0c;慢慢梳理这些让人困惑的点。譬如本章要梳理的Lifecycle和SmartLifecycle。它们均为接口&#xff0c;其中后…

【TB作品】MSP430F149单片机,广告牌,滚动显示

LCD1602滚动显示切换播放暂停字符串 显示Public Places 显示No Smoking 播放 暂停 部分代码 char zifu1[] "Public Places "; char zifu2[] "Class Now "; char zifu3[] "No admittance "; char *zifu[] { zifu1, zifu2, zifu3 }…

【kafka】关于Kafka的入门介绍

为什么要使用kafka&#xff1f;kafka是什么东西&#xff1f; 案例场景 A服务向B服务发送消息&#xff0c;A服务传输数据很快&#xff0c;B服务处理数据很慢&#xff0c;这样B服务就会承受不住&#xff0c;怎么办&#xff1f;通过添加消息队列作为缓冲。kafka就是消息队列中的…

使用Xshell一键在多个会话中执行多个命令

背景 平时在工作中经常通过ssh远程操作Linux&#xff0c;由于我们负责的服务部署在超过5台服务器&#xff08;相同的代码及路径&#xff09;&#xff0c;每次发布后执行重启都得重复操作5次关闭、检查、启动、查看日志&#xff0c;特别繁琐。 后来发现Xshell 7可以录制脚本&am…

This may be due to a blocked port, missing dependencies

安装XAMPPXAMPP之后启动mysql出现如下问题&#xff0c;只需双击XAMPP安装目录下的setup_xampp&#xff0c;等待运行完毕。 重启&#xff0c;双击xampp-control. 重新进入xampp控制界面&#xff0c;点击start。

【Pytorch 】Dataset 和Dataloader制作数据集

文章目录 Dataset 和 Dataloader定义Dataset定义Dataloader综合案例1 导入两个列表到Dataset综合案例2 导入 excel 到Dataset综合案例3 导入图片到Dataset导入官方数据集Dataset 和 Dataloader Dataset指定了数据集包含了什么,可以是自定义数据集,也可以是以及官方数据集Data…

PermissionError:Permission denied: ‘/dev/ttyUSB0’问题解决

1、问题描述 用树莓派5的一个usb口&#xff0c;接收IMU数据&#xff0c;运行python程序报错如下 2、问题解决 其实之前写过&#xff0c;方便后面好找&#xff0c;单独备份下&#xff0c; 查看ttyUSB0所属的用户组命令如下&#xff1a; ls -l /dev 以上可以看出ttyS*和ttyUS…

Pinia(三): 了解和使用state

1.state state 就是我们要定义的数据, 如果定义 store 时传入的第二个参数是对象, 那么 state 需要是一个函数, 这个函数的返回值才是状态的初始值.这样设计的原因是为了让 Pinia 在客户端和服务端都可以工作 官方推荐使用箭头函数(()>{ })获得更好的类型推断 import { de…

PX4 ROS2 真机

如果仿真跑通了。 真机遇到问题&#xff0c;可参考此文章。 ubuntu22 px4 1.14.3 ros2 humble 硬件接线。 先找两个usb - ttl串口&#xff0c;分别接到两台主机上&#xff0c;保证串口通信正常。 图中是个六合一的。浪费一天时间&#xff0c;发现是串口设置错误&#xff…

构建LangChain应用程序的示例代码:9、使用Anthropic API生成结构化输出的工具教程

使用Anthropic API生成结构化输出的工具 Anthropic API最近增加了工具使用功能。 这对于生成结构化输出非常有用。 ! pip install -U langchain-anthropic可选配置&#xff1a; import osos.environ[LANGCHAIN_TRACING_V2] true # 启用追踪 os.environ[LANGCHAIN_API_KEY…

eclipse-向Console控制台输出信息

首先这里主要用到的是org.eclipse.ui.console这个包&#xff0c;所以现在顺道先来了解一下&#xff1a; org.eclipse.ui.console是一个可扩展的console视图插件&#xff0c;利用它可以实现各种console&#xff0c;并把它们显示出来。该插件本身就实现了一个Message Console&…

AI之下 360让PC商业生态大象起舞

时隔7年&#xff0c;淘宝PC版在前不久迎来重磅升级&#xff0c;在产品体验、商品供给、内容供给等方面做了全面优化&#xff0c;以全面提升PC端的用户体验&#xff1b;当大家都以为移动互联网时代下APP将成为主流时&#xff0c;PC端却又成为了香饽饽。其实PC端被重视&#xff0…

【Linux】操作系统中的文件系统管理:磁盘结构、逻辑存储与文件访问机制

文章目录 前言&#xff1a;1. 磁盘机械结构2. 磁盘物理结构3. 磁盘的逻辑存储3. 1. 文件名呢&#xff1f;3.2 对文件的增删查改与 路径3.3. 文件 4. 软硬链接4.1. 操作观察现象4.2. 软硬链接的原理4.3. 软硬链接的应用场景 总结 前言&#xff1a; 在现代操作系统中&#xff0c…

mysql的锁(全局锁)

文章目录 mysql按照锁的粒度分类全局锁概念&#xff1a;全局锁使用场景&#xff1a;全局锁备份案例&#xff1a; mysql按照锁的粒度分类 全局锁 概念&#xff1a; 全局锁就是对整个数据库实例加锁。MySQL 提供了一个加全局读锁的方法&#xff0c;命令是: Flush tables with…

多输入多输出非线性对象的模型预测控制—Matlab实现

本示例展示了如何在 Simulink 中设计多输入多输出对象的闭环模型预测控制。该对象有三个操纵变量和两个测量输出。 一、非线性对象的线性化 运行该示例需要同时安装 Simulink 和 Simulink Control Design。 % 检查是否同时安装了 Simulink 和 Simulink Control Design if ~m…

网络网络层之(6)ICMPv4协议

网络网络层之(6)ICMPv4协议 Author: Once Day Date: 2024年6月2日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CS…