【代码随想录——回溯算法——三周目】

devtools/2024/10/23 12:35:39/

1. 子集2

在这里插入图片描述这题需要先进行排序,和候选人那题类似。防止出现重复的子集。

func subsetsWithDup(nums []int) [][]int {path := make([]int, 0)res := make([][]int, 0)sort.Ints(nums)var dfs func(nums []int, start int)dfs = func(nums []int, start int) {res = append(res, append([]int(nil), path...)) //使用append创建path的副本for i := start; i < len(nums); i++ {if i != start && nums[i] == nums[i-1] {continue}path = append(path, nums[i])dfs(nums, i+1)path = path[:len(path)-1]}}dfs(nums, 0)return res
}

2. 递增子序列

在这里插入图片描述

func findSubsequences(nums []int) [][]int {res := make([][]int,0)path := make([]int,0)var dfs func(nums []int,start int)dfs = func(nums []int,start int){if len(path)>=2{res = append(res,append([]int(nil), path...))}used := make(map[int]bool,len(path))for i:=start;i<len(nums);i++{if used[nums[i]]{//去重continue}if len(path)==0 || nums[i]>=path[len(path)-1]{path = append(path,nums[i])used[nums[i]]=truedfs(nums,i+1)path = path[:len(path)-1]}}}dfs(nums,0)return res
}

3. 全排列

在这里插入图片描述

var (res [][]intpath  []intst    []bool   // state的缩写
)
func permute(nums []int) [][]int {res, path = make([][]int, 0), make([]int, 0, len(nums))st = make([]bool, len(nums))dfs(nums, 0)return res
}func dfs(nums []int, cur int) {if cur == len(nums) {tmp := make([]int, len(path))copy(tmp, path)res = append(res, tmp)}for i := 0; i < len(nums); i++ {if !st[i] {path = append(path, nums[i])st[i] = truedfs(nums, cur + 1)st[i] = falsepath = path[:len(path)-1]}}
}

4. 全排列2

在这里插入图片描述
需要注意:如何去重。先对数组进行排序,对于相同的字母,如果前面没选,则后面的页不能选。

var(path []intres [][]int
)
func permuteUnique(nums []int) [][]int {path = make([]int,0)res = make([][]int,0)used := make([]bool,len(nums))sort.Ints(nums)dfs(nums,used,0)return res
}func dfs(nums []int,used []bool,count int){if count==len(nums){res=append(res,append([]int(nil),path...))}for i:=0;i<len(nums);i++{if i!=0 && nums[i]==nums[i-1] && used[i-1]==false{continue}if used[i]==false{path = append(path,nums[i])used[i]=truedfs(nums,used,count+1)path = path[:len(path)-1]used[i]=false}}
}

http://www.ppmy.cn/devtools/43324.html

相关文章

element ui 的el-input输入一个字后失去焦点,需重新点击输入框才能再次输入!

解决方案&#xff1a; 我是form表单嵌套表格&#xff0c;里面的el-input输入框&#xff0c;输入第一个值的时候会突然失去焦点&#xff0c;需要再次点击输入框才能正常输入&#xff0c;原因是table的key值&#xff0c;需要改成正常的index即可&#xff0c;如果你是循环的&…

Spring Boot集成rss快速入门demo

1.什么是rss&#xff1f; RSS 的全称是「简易内容聚合」&#xff08;Really Simple Syndication&#xff09;&#xff0c;是一个能让你在一个地方订阅各种感兴趣网站的工具。 一个网站支持 RSS&#xff0c;就意味着每当它新发布一篇新文章&#xff0c;就会往一个位于特定网址的…

BioTech - 使用 循环(Recycle)迭代的蛋白质结构预测 获取 高精度结构

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/139239077 高精度的蛋白质结构对于理解生物问题具有极其重要的意义。蛋白质是生物体内执行多种功能的基本分子,其结构决定了其功能。蛋白质的三维结构可以帮…

Git命令之江湖百晓生

Git 命令大全 第一章&#xff1a;Git 简介 Git 是一个开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年创建&#xff0c;用于有效、高速地处理从小到大的项目。它是一个命令行工具&#xff0c;用于跟踪和管理源代码历史记录。 第二章&#xff1a;Git 的 1…

【MySQL精通之路】全文搜索(9)-全文解析器-MeCab

主博客&#xff1a; 【MySQL精通之路】全文搜索功能-CSDN博客 目录 1.介绍 2.安装MeCab Parser插件 3.创建使用MeCab分析器的FULLTEXT索引 4.MeCab Parser空间处理 5.MeCab分析程序停止字处理 6.MeCab Parser术语搜索 7.MeCab分析程序通配符搜索 8.MeCab语法分析器短语…

设计模式——概述

1.设计模式定义 ​ 设计模式是软件设计中常见问题的典型解决方案,可用于解决代码中反复出现的设计问题。设计模式的出现可以让我们站在前人的肩膀上&#xff0c;通过一些成熟的设计方案来指导新项目的开发和设计&#xff0c;以便于我们开发出具有更好的灵活性和可扩展性&#…

重新安装 Windows 10/11 后如何恢复丢失的数据?

“嗨&#xff0c;我的 Windows 10/11 崩溃了&#xff0c;所以我不得不重新安装它。我使用 USB 可启动驱动器重新安装了操作系统。但是&#xff0c;重新安装后&#xff0c;C 盘上的所有先前文件都丢失了。有什么方法可以恢复丢失的文件吗&#xff1f;” - 孙雯 在大多数情况下&…

STM32硬件接口I2C应用(基于BMP085)

目录 概述 1 STM32Cube控制配置I2C 1.1 I2C参数配置 1.2 使用STM32Cube产生工程 2 HAL库函数介绍 2.1 初始化函数 2.2 写数据函数 2.3 读数据函数 3 大气压力传感器BMP085 3.1 BMP085介绍 3.2 BMP085的应用电路 3.3 BMP085操作流程 3.4 BMP085寄存器 3.5 开始温…