代码随想录回溯总结

news2024/11/27 0:24:17

文章目录

      • 0、 前言
        • 1、回溯的定义
        • 2、回溯解决那些问题
        • 3、回溯模板
        • 4、问题详解
          • 4、1组合问题:
            • [4.1.1 组合](https://leetcode.cn/problems/combinations/)
            • [4.1.2 组合总和 II](https://leetcode.cn/problems/combination-sum-ii/)
            • 4.1.3 组合的其他问题
          • 4.2排列问题
            • 4.2.1[全排列](https://programmercarl.com/0046.%E5%85%A8%E6%8E%92%E5%88%97.html)
            • 4.2.2[全排列去重](https://programmercarl.com/0047.%E5%85%A8%E6%8E%92%E5%88%97II.html)
          • 4.3子集问题
            • 4.3.1子集
          • 4.4 切割问题
            • 分割回文串
          • 4.5 棋盘问题

0、 前言

我很少写总结,但是回溯是我写的最多,个人也觉得比较重要的一个专题,所以写一个简单的总结一下这段时间刷的回溯题型

1、回溯的定义

回溯就是暴力搜索,而暴力确实我们在开发中最先想到一种方法,所以必须要掌握

2、回溯解决那些问题

  • 组合问题: N个数里面按一定规则找出k个数的集合
  • 排列问题: N个数按一定规则全排列,有几种排列方式
  • 切割问题: 一个字符串按一定规则有几种切割方式
  • 子集问题: 一个N个数的集合里有多少符合条件的子集
  • 棋盘问题: N皇后,解数独等问题

3、回溯模板

回溯也是有套路的

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }

    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

4、问题详解

4、1组合问题:
4.1.1 组合

题目:
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案

总结:for循环横向遍历,递归纵向遍历,回溯不断调整结果集
在这里插入图片描述

4.1.2 组合总和 II

总结:我们在这里要学会组合问题的降重
在这里,我们要明白树枝去重和树层去重这两个概念
used[i-1] = true:表示的在同一个树枝上
used[i-1] = false:表示在同一个树层上
也可以用另外的一个方法

if(i > index && nums[i] == nums[i-1]) continue
在这里插入图片描述

4.1.3 组合的其他问题

总结:

  • 如果是一个集合来求组合的话,就需要startIndex,例如:回溯算法:求组合问题!
  • 如果是多个集合取组合,各个集合之间相互不影响,那么就不用startIndex,例如:回溯算法:电话号码的字母组合
4.2排列问题

排列问题和组合问题的区别:

  • 每层都是从0开始搜索而不是startIndex
  • 需要used数组记录path里都放了哪些元素了
4.2.1全排列

总结:这是模板题

4.2.2全排列去重

这道题有点意思,去重可以使用set,也可以使用used数组,但是基本上都是使用used,因为它的时间复杂度低一点
要好好判断是树枝降重和树层降重

4.3子集问题
4.3.1子集

总结:模板题

######4.3.2子集问题去重

总结:去重原理参照前面组合问题

4.4 切割问题
分割回文串

总结:
1、我们需要判断是否是回文串
2、组合的模板
3、我们需要判断切割的位置(要不要加i+1)
在这里插入图片描述

4.5 棋盘问题

暂时未总结,待更新

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

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

相关文章

3.Isaac入门

Isaac入门 本节提供有关如何开始开发和运行 Isaac 应用程序的指南。 文章目录Isaac入门教程和示例应用程序运行应用程序应用程序控制台选项在 Jetson 上部署和运行Python 应用程序支持使用分布式工作区使用 Docker安装依赖创建 Isaac SDK 开发镜像教程和示例应用程序 有一个可…

【运维有小邓】实时告警通知

当网络上发生特定事件时,EventLog Analyzer可以通过多种方式进行响应。EventLog Analyzer可以实时生成告警 - 发送电子邮件或短信通知给指定的接收者 - 或运行由管理员提供的自定义脚本。通过所提供的多个选项,用户可以确保不会错过任何安全事件。EventL…

Python解题 - CSDN周赛第21期 - 接雨水

本期比赛都是比较基础的排序、查找,没有多少难度。不过有很多人反映第二题测试数据有问题,基本所有选手在本题上都没得分。最近官方每期比赛都会有类似的数据问题,虽然参赛者对数据有疑问,但从未得到解答,官方也未曾公…

十年云深时:天翼云的成长密钥

工业时代,我们通常以“用电量”作为指标,来衡量一个地方的经济发展水平。数字经济时代,“用云量”则与数字经济规模呈正相关。因此,中国数字化浪潮的持续推进,也让云计算行业的重要性与市场竞争性不断提升,…

【C语言】交换奇偶位和 offsetof 宏的实现

​🌠 作者:阿亮joy. 🎆专栏:《阿亮爱刷题》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉交换奇偶…

2021年 APP个人信息使用态势分析报告

声明 本文是学习2021年APP个人信息使用态势分析报告. 下载地址 http://github5.com/view/55008而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 App违规行为处罚案例 某赚钱类App未明示信息收集规则被罚 经查公安机关调查,某网络科技公司开…

2023 CPA 会计-存货【刷题】

1. 存货的确认和初始计量 大元公司为增值税一般纳税人,增值税税率为13%。 这句话好像没有用 2019年购入材料300公斤,收到增值税发票注明价款1800万元,增值税税额是234万元。 增值税是在价款的基础上收取的,所以这批材料的价值就是…

【收集】缩写合集

AABB 全称:Axis Aligned Bounding Box参考 https://blog.csdn.net/qq_22822335/article/details/50930437AABB包围盒在游戏中,为了简化物体之间的碰撞检测运算,通常会对物体创建一个规则的几何外形将其包围。其中,AABB&#xff08…

【链表】关于链表,你该了解这些!

【链表】理论基础1 链表是什么1.1 单链表1.2 双链表1.3 循环链表2 链表的存储方式3 链表的定义3.1 C/C方式3.2 Java方式3.3 JavaScript方式4 链表的操作4.1 删除结点4.2 添加结点1 链表是什么 1.1 单链表 单链表是一种通过指针串联在一起的线性结构,每一个节点由两…

谷粒学苑项目-第一章数据库设计与项目结构

一、数据库设计 1、数据库 guli2、数据表 CREATE TABLE edu_teacher (id char(19) NOT NULL COMMENT 讲师ID,name varchar(20) NOT NULL COMMENT 讲师姓名,intro varchar(500) NOT NULL DEFAULT COMMENT 讲师简介,career varchar(500) DEFAULT NULL COMMENT 讲师资历,一句话说…

6个实用的红米手机技巧

❤️作者主页:IT技术分享社区 ❤️作者简介:大家好,我是IT技术分享社区的博主,从事C#、Java开发九年,对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉: 数据库领域优质创作者🏆&#x…

盐湖提锂纳滤膜后钙镁离子深度处理技术

盐湖提锂:大规模、低成本,全球锂资源供应主体的理想来源锂作为自然界中轻、标准电极电势低、电化学当量大的金属元素,是天生理想的“电池金属”,因此在要求高比能的动力和储能应用场景中将具备长期的需求刚性,被誉为“…

Skywalking简单入门使用

🏆今日学习目标: 🍀Skywalking简单入门使用 ✅创作者:林在闪闪发光 ⏰预计时间:50分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入: 林…

软件测试/测试开发丨 | 想做App测试就一定要了解的App结构

性能测试 所谓的性能测试要在功能测试之后。 功能测试:关注能不能用 性能测试:关注好不好用 常见的性能关注点有: 接口响应时间:50毫秒 ~ 1000毫秒 吞吐量:1000万每天,2000万每天 ......10亿每天 TPS&a…

java面试题基本部分

一、Java 基础 1.Java常见基本类型如下 整数类(byte、short、int、long) 浮点类(float、double) 字符类(char) 布尔型(boolean)大小: boolean(8位 1字节) byte(8位 1字…

【数据结构与算法】Manacher算法

Manacher算法 https://github.com/SongJianHIT/DataStructurs-Algorithm/tree/main/src/algorithms/manacher 基本介绍 Manacher 算法常用于 求一个字符串中的最长回文子串。如:abc123321def 的最长回文子串为 123321。 计算字符串的最长回文字串最简单的算法就是…

Lattice CrossLink-Nx LIFCL-40应用连载8:MIPI DSI接口驱动LCD显示器

作者:Hello,Panda 一、案例需求 使用LIFCL-40-7MG121I FPGA的MIPI DSI硬核接口驱动7寸LCD显示器: (1)显示器:7寸,1024*600横屏,60Hz; (2)MIPI物…

计算机网络实验---Cisco Packet Tracer 实验

直接连接两台 PC 构建 LAN 用交换机构建 LAN 交换机接口地址列表 生成树协议(Spanning Tree Protocol) 路由器配置初步 静态路由 动态路由 RIP 动态路由 OSPF 基于端口的网络地址翻译 PAT 虚拟局域网 VLAN 虚拟局域网管理 VTP VLAN 间的通信 …

功率放大器电路图集(多种类功率放大电路)

关于功率放大器电路图集的问题是很多工程师都感兴趣和想了解的,今天就请安泰电子来为大家介绍一下多种类功率放大电路的内容。 一、功率放大电路介绍 1、一般情况来说功率放大电路的主要作用是让负载在不使信号失真或轻微失真的情况下获得最大功率。因此&#xff0c…

JavaScript 语法

文章目录JavaScript 语法JavaScript 语法JavaScript 字面量JavaScript 变量JavaScript 操作符JavaScript 语句JavaScript 关键字JavaScript 注释JavaScript 数据类型数据类型的概念JavaScript 函数JavaScript 字母大小写JavaScript 字符集JavaScript 语法 JavaScript 是一个程序…