首页 > 编程语言 >力扣回溯算法--总结篇

力扣回溯算法--总结篇

时间:2024-03-30 23:59:55浏览次数:27  
标签:nums -- res len 力扣 int 回溯 path

前言

期末考试加上寒假两个月,一直没有动力,差不多三个月没写题了。最近写题也没有及时写文章总结,实在不知道如何开始,但是也得开始啊。干脆写个总结吧,再开始每天坚持写题写文章。玩了两个月,很多事情没有完成,很多东西也忘得差不多了,得抓紧时间捡起来,坚持输入,坚持输出。

内容

这些天陆陆续续刷的题如下:组合,切割,子集,排列等题型。

回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。

那么既然回溯法并不高效为什么还要用它呢?

因为没得选,一些问题能暴力搜出来就不错了,撑死了再剪枝一下,还没有更高效的解法。

回溯法,一般可以解决如下几种问题:

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

回溯法解决的问题可以抽象为树形结构,集合的大小构成了树的宽度,递归的深度构成的树的深度

for循环横向遍历,递归纵向遍历,回溯不断调整结果集

模板:

var(
    path []int
    res [][]int
)
func findSubsequences(nums []int) [][]int {
 path,res=make([]int,0,len(nums)),make([][]int,0)
 dfs(nums,0)
 return res
}

func dfs(nums []int,start int){
      if len(path)>=2{
        temp:=make([]int,len(path))
        copy(temp,path)
        res=append(res,temp)
      }
      used:=make(map[int]bool,len(nums))
     for i:=start;i<len(nums);i++{
          if used[nums[i]]{
            continue
          }
          if len(path)==0||nums[i]>=path[len(path)-1]{
            //这个条件检查 path 是否为空。如果是,这意味着我们还没有在 path 中添加任何元素,所以我们可以添加 nums[i],无论它的值是多少。
            //这个条件确保我们添加到 path 中的下一个元素 nums[i] 大于或等于 path 中的最后一个元素。这是为了确保我们正在构建的序列是递增的。
            path=append(path,nums[i])
            used[nums[i]]=true
            dfs(nums,i+1)
            path=path[:len(path)-1]
          }
     }
     
}

最后

加油吧!下一站,贪心算法。

标签:nums,--,res,len,力扣,int,回溯,path
From: https://blog.csdn.net/m0_62786673/article/details/137180561

相关文章

  • Java学习计划和之后的规划
    Java是一种广泛使用的编程语言,以其“一次编写,到处运行”的能力而闻名。对初学者来说,学习Java可以是一个既充满挑战又充满回报的旅程。以下是一份详细的学习计划,可帮助初学者入门并在Java编程世界中稳步前进。##第一阶段:基础入门(1-3个月)###目标-理解Java的基础概念和语法......
  • 数据库原理与应用(SQL Server)笔记——第三章 关系数据库规范化
    目录一、关系数据库设计理论二、关系模式的形式化表示三、函数依赖四、关系模式规范化(一)规范化目的(二)范式(三)范式化过程一、关系数据库设计理论函数依赖、范式和模式设计是关系数据库设计理论中的主要内容,其中函数依赖起到核心作用,范式用来描述数据库结构的标准化程......
  • 初学可视化PyQt5系列--hello my four rotor drone
    【初学可视化PyQt5系列】第1章PyQt5简介第2章PyQt5新增功能第3章Hellomyfourrotordrone第4章PyQt5主要类第5章PyQt5使用Qt设计器第6章PyQt5信号与插槽第7章PyQt5布局与管理第8章PyQt5基本小部件第9章PyQt5QDialog类第10章PyQt5QMessageBox......
  • 送朋友的生日祝福静态页面代码!(小白也能轻松GET!)
            Hey亲爱的小白们!......
  • 【componentsearchengine.com网站不容易注册的解决办法,附MPU6050 Proteus原理图仿真模
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、先注册一个国外邮箱注册时注意事项:二、注册componentsearchengine.com网站帐号1.该网站注册注意事项2.一旦帐号注册成功,该网站就可以正常下载了,无需科学上网3.其他问题总结前言最......
  • 园区网结构
    网元:路由器,交换机,设备的个体交换机:24/48/52(多四个光纤口)个以太网口/电口(POE交换机)CDP(思科私有发现邻居交换机协议)/LLDPCEF思科快速转发1、网络架构①平面网络②分层网络2、园区网络架构①接入层:用于用户的接入网络设备:二层交换机②汇聚层/分布层:用于汇聚来自接入......
  • STP生成树
    背景:为了达到网络的高可用性,通常会部署冗余的线路,来避免单点故障的问题,但是冗余的环境会造成其他的问题:广播风暴、帧的多个副本,mac数据可不稳定。为了避免冗余环境带来的问题,提出了stp协议来避免。1.分类①stp:spanningtreeprotocol,生成树协议,基于802.1d协议②cst  ③p......
  • 卷积神经网络学习笔记——ZFNet(Tensorflow实现)
    完整代码及其数据,请移步小编的GitHub地址传送门:请点击我如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote这个网络应该是CNN的鼻祖,早就出来了,这篇笔记也早就写完了,但是一直是未发布状态,估计是忘了。虽然说现在已经意义不大了,还是就当自己清理库存,温习......
  • 将视图转为表
    SELECTCOLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,IS_NULLABLE,COLUMN_KEY,COLUMN_DEFAULT,EXTRAFROMINFORMATION_SCHEMA.COLUMNSWHERETABLE_SCHEMA='your_database_name'ANDTA......
  • Spring中如何解决循环依赖
    八字真言:“三级缓存,提前暴露”此文只是介绍简单的情况便于理解,实际上场景会更复杂、情况会更多,但是原理相通。一、什么是循环依赖?从字面上来理解就是A依赖B的同时B也依赖了A,就像下面这样 上图是简单的循环依赖,也会存在A依赖B,B依赖C,C依赖A这种循环,或者更复杂的情况。(在实际......