首页 > 编程语言 >道长的算法笔记:通过回溯暴力枚举

道长的算法笔记:通过回溯暴力枚举

时间:2022-12-02 10:26:16浏览次数:67  
标签:排列 道长 组合 元素 枚举 回溯 排序

(一) 排列与组合

 通常通常循环来做暴力枚举是有局限性,通过回溯算法来做枚举往往会更加优雅,回溯算法中两个重要的模型便是组合模型与排列模型。

题目 思路描述
LC0077. 组合
LC0078. 子集
组合和子集要求的答案都是顺序无关的,因而与排列不同的地方在于,枚举组合的时候,for 循环的起始下标是递增的
LC0040. 组合总和 II
LC0090. 子集 II
对给定的数组排序,然后回溯的时候如果当前元素与上一个元素相等则跳过当前元素,以此实现去重的效果,两道题的去重套路都是一模一样的
LC0216. 组合总和 III 枚举固定长度的组合数,通过排序给定数组去重,通过数据范围均为正数故相加不允许超过指定数值 n 来做剪枝
LC0046. 全排列
LC0047. 全排列 II
由于不像组合问题那样「每次递归进入更深层之后枚举的起始下标会递增」,在求排列问题的时候需要额外的开辟 vist 数组维护已经访问的元素,去重思路与上面大同小异。
LC0491. 递增子序列 本题的去重非常有技巧性,因为这个递增子序列是要保序的,因而不可以通过排序去重,那么需要分类讨论:(1)前选后选,(2)前不选后选,(3)前选后不选,(4)前不选后不选,(2)与(3)其实能合并归为一种的,因而维护上一个选择的元素,递归时分为选择当前元素与不选当前元素两种情况讨论即可。

(二) 去重与剪枝

 当有重复元素的时候,去重往往是通过排序来实现的,但当需要枚举子序列等需要保序的答案时,基于排序的去重思路便不好使了。如果给定了约束条件,一般可以通过约束条件来做剪枝思路。

支持作者

标签:排列,道长,组合,元素,枚举,回溯,排序
From: https://www.cnblogs.com/taoist-chen/p/16943580.html

相关文章

  • 共用体和枚举类型
    描述有n个人员的数据,其中有老师和学生。学生的数据中包括姓名,号码,性别,职业,班号;老师的数据中包括:姓名,号码,性别,职业,职务。可以看出,学生和老师的数据是不同的,学生有班号而没职......
  • 枚举小例子记录
    1、创建枚举类:packagecom.atguigu.common.constant;publicclassProductConstant{publicenumAttrEnum{ATTR_TYPE_BASE(1,"基本属性"),ATTR_TYPE_SALE......
  • C#后续任务条件参数:TaskContinueOption --枚举类型
    一、概述一个线程可以有多个任务,一个任务也可以包含多个任务。把一个任务附加给另一个任务,就需要用到ContinueWith()。该方法是Task类中的方法,有多个重载,其中最基......
  • 常量和枚举的区别
    常量和枚举最大的不同是,枚举是可以穷举的“常量”,比如性别,只有那几种;而常量则是可以有无限多种,一般是用来处理魔法值的,让魔法值限定在某个类里,比如错误通知内容,短信通知内......
  • java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名
    ***测试demo  git仓库: ​​https://github.com/alwaysInRoad/test-enum-demo.git​​             测试demo内的代码是从实际项目中抽离出来......
  • 【小航的算法日记】因子分解和枚举
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1952.三除数​​​​解:​​​​题:1492.n的第k个因子​​​​解:​​​​题:1362.最接近的因数​​​​解:......
  • 【小航的算法日记】 线性枚举(一) - 最值算法
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:485.最大连续1的个数​​​​解:​​​​题:1464.数组中两元素的最大乘积​​​​解:​​​​题:153.寻找旋......
  • 【小航的算法日记】线性枚举(二) - 统计法入门
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1550.存在连续三个奇数的数组​​​​解:​​​​题:1295.统计位数为偶数的数字​​​​解:​​​​题:540.有......
  • Freesql ORM 多条件枚举Sum
    反射枚举desc建拉姆达查询sum///<summary>///创建lambda表达式:p=>p.propertyName///</summary>///<typeparamname="T"></ty......
  • 枚举
    枚举枚举的作用:"是为了做信息的标志和信息的分类"。枚举类都是继承了枚举类型:java.lang.Enum枚举都是最终类,不可以被继承。构造器都是私有的,枚举对外不能创建对象。枚举......