(1)回溯算法团灭子集、组合、排列问题 -- 元素无重不可复选

news/2025/1/20 6:38:30/

回溯算法团灭子集、组合、排列问题
根据元素是否重复和是否可复选,分为以下三种变体:
1、元素无重不可复选
2、元素有重不可复选
3、元素无重可复选

该篇给出第一种情况的代码,另外两种的实现见上方变体链接。


class NoRepeatAndSingle:"""元素无重不可复选"""def subsets(self, nums: List[int]) -> List[List[int]]:"""子集问题:param nums::return:"""self.res = []self.track = []self.s_backtrack(nums, 0)return self.resdef s_backtrack(self, nums, start):#  前序位置,每个节点的值都是⼀个⼦集self.res.append(self.track[:])for i in range(start, len(nums)):# 做选择self.track.append(nums[i])# 通过 start 参数控制树枝的遍历,避免产⽣重复的⼦集self.s_backtrack(nums, i+1)# 撤销选择self.track.pop()def combination(self, nums: List[int], k: int) -> List[List[int]]:"""组合问题:param nums::param k::return:"""self.res = []self.track = []self.c_backtrack(nums, 0, k)return self.resdef c_backtrack(self, nums, start, k):#  base caseif len(self.track) == k:self.res.append(self.track[:])returnfor i in range(start, len(nums)):# 做选择self.track.append(nums[i])# 通过 start 参数控制树枝的遍历,避免产⽣重复的⼦集self.c_backtrack(nums, i+1, k)# 撤销选择self.track.pop()def permute(self, nums: List[int]) -> List[List[int]]:"""排列问题:param nums::return:"""self.res = []self.track = []self.used = [False] * len(nums)self.p_backtrack(nums)return self.resdef p_backtrack(self, nums):#  base caseif len(self.track) == len(nums):self.res.append(self.track[:])returnfor i in range(0, len(nums)):# 已经存在 track 中的元素,不能重复选择if self.used[i]:continue# 做选择self.used[i] = Trueself.track.append(nums[i])# 通过 start 参数控制树枝的遍历,避免产⽣重复的⼦集self.p_backtrack(nums)# 撤销选择self.used[i] = Falseself.track.pop()

http://www.ppmy.cn/news/1092851.html

相关文章

vue3组件通信学习笔记

1、Prop 父组件 <template><div class"parent"><h1>我是父元素</h1><Child :msg"msg"></Child></div> </template><script setup> import Child from ./Child.vue let msg ref(我是父组件的数据…

使用Java分析器优化代码性能,解决OOM问题

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 背景 最近我一直在做性能优化&#xff0c;对一个单机应用做性能优化。主要是涉及到解析和导入导出相关的业务。 大致说一下这个单机应用…

jenkins快速跑通helloworld任务

jenkins新建helloworld示例 左上角“新建任务” 输入名称&#xff0c;选择第一个创建&#xff1a; 可以选择众多执行脚本&#xff0c;这里选择shell&#xff1a; 随后弹出一个窗口&#xff0c;将下面脚本填入&#xff1a; #!/bin/bashecho start... for i in {1..10}doecho $i…

下载git

1.官网下载可能会有访问失败 2.用其他的镜像源下载 快 准 狠 CNPM Binaries Mirror

读SQL学习指南(第3版)笔记13_读后总结与感想兼导读

1. 基本信息 SQL学习指南(第3版) Learning SQL, Third Edition [美] 艾伦博利厄 &#xff08;Alan Beaulieu&#xff09; 人民邮电出版社,2022年4月出版 1.1. 读薄率 书籍总字数424千字&#xff0c;笔记总字数25969字。 读薄率25969424000≈6.13% 1.2. 读厚方向 SQL入门经…

阿里云服务器怎么退款?云服务器退款流程图

阿里云服务器如何退款&#xff1f;云服务器在哪申请退款&#xff1f;在用户中心订单管理中的退订管理中退款&#xff0c;阿里云百科分享阿里云服务器退款流程&#xff0c;包括申请退款入口、云服务器退款限制条件、退款多久到账等详细说明&#xff1a; 目录 阿里云服务器退款…

【Nginx23】Nginx学习:响应头与Map变量操作

Nginx学习&#xff1a;响应头与Map变量操作 响应头是非常重要的内容&#xff0c;浏览器或者客户端有很多东西可能都是根据响应头来进行判断操作的&#xff0c;比如说最典型的 Content-Type &#xff0c;之前我们也演示过&#xff0c;直接设置一个空的 types 然后指定默认的数据…

Docker的简介及安装

[shouce]http://shouce.jb51.net/docker_practice/栾一峰菜鸟教程参考文献 1 环境配置的难题 软件开发最大的麻烦事之一&#xff0c;就是环境配置。用户计算机的环境都不相同&#xff0c;你怎么知道自家的软件&#xff0c;能在那些机器跑起来&#xff1f; 用户必须保证两件事…