2023-12-26分割回文串和子集以及子集II

131. 分割回文串

在这里插入图片描述

思想:回溯三步骤!① 传入参数 ② 回溯结束条件 ③ 单层搜索逻辑!抽象成回溯树,树枝上是每次从头部穷举切分出的子串,节点上是待切分的剩余字符串【从头开始每次往后加一】

img

class Solution:def partition(self, s: str) -> List[List[str]]:result = []self.backtrack(s,0,[],result)return resultdef backtrack(self, s, start, temp_list, result):# 结束条件?当start遍历到s的长度的时候说明子串都满足条件if start == len(s):# [:]这个很重要!不小心的会丢失了数据result.append(temp_list[:])return for i in range(start,len(s)):# 如果满足子串是回文串继续递归,否则在原基础往后移动if self.huiwenchuan(s, start, i):# 当前节点 i + 1temp_list.append(s[start:i + 1])self.backtrack(s, i + 1, temp_list, result)# 回溯操作temp_list.pop()# 判断回文子串def huiwenchuan(self, s, start1, end1):start = start1end = end1while start < end:if s[start] != s[end]:return Falsestart += 1end -= 1return True

78. 子集

思路:组合问题和分割问题就是收集回溯树叶子节点!而子集就是找树的所有节点!需要考虑是否有序?其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。那么既然是无序,取过的元素不会重复取,写回溯算法的时候,for就要从startIndex开始,而不是从0开始!

78.子集

class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:result = []result.append([])self.backtrack(nums, [], 0, result)return resultdef backtrack(self, nums, temp_list, start_index, result):if len(temp_list) >= 1:result.append(temp_list[:])# 取树上的节点了 不需要return i + 1 会自动结束for i in range(start_index, len(nums)):temp_list.append(nums[i])self.backtrack(nums, temp_list, i + 1, result)temp_list.pop()

90. 子集 II

思路:和78.子集 (opens new window)区别就是集合里有重复元素了,而且求取的子集要去重。简单一点就排序后,进行获取子集!或者树层去重或树枝去重

90.子集II

class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:result = []result.append([])nums.sort()   # 为什么加了这个就能通过?对子集进行排序的时候会发现有重复的子集了self.backtrack(nums, [], 0, result)return resultdef backtrack(self, nums, temp_list, start_index, result):# 关键是去重if len(temp_list) >= 1:if temp_list not in result:result.append(temp_list[:])# 取树上的节点了 不需要returnfor i in range(start_index, len(nums)):temp_list.append(nums[i])self.backtrack(nums, temp_list, i + 1, result)temp_list.pop()class Solution:def subsetsWithDup(self, nums):result = []path = []nums.sort()  # 去重需要排序self.backtracking(nums, 0, path, result)return resultdef backtracking(self, nums, startIndex, path, result):result.append(path[:])  # 收集子集uset = set()for i in range(startIndex, len(nums)):if nums[i] in uset:continueuset.add(nums[i])path.append(nums[i])self.backtracking(nums, i + 1, path, result)path.pop()
class Solution:def subsetsWithDup(self, nums):result = []path = []used = [False] * len(nums)nums.sort()  # 去重需要排序self.backtracking(nums, 0, used, path, result)return resultdef backtracking(self, nums, startIndex, used, path, result):result.append(path[:])  # 收集子集for i in range(startIndex, len(nums)):# used[i - 1] == True,说明同一树枝 nums[i - 1] 使用过# used[i - 1] == False,说明同一树层 nums[i - 1] 使用过# 而我们要对同一树层使用过的元素进行跳过if i > 0 and nums[i] == nums[i - 1] and not used[i - 1]:continuepath.append(nums[i])used[i] = Trueself.backtracking(nums, i + 1, used, path, result)used[i] = Falsepath.pop()

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

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

相关文章

JavaScript中实现页面跳转的多种方法【通俗易懂】

✨前言✨   本篇文章主要在于如何使用JavaScript中的各种实现页面跳转的方式 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 在JavaScr…

Fortify漏洞之Sql Injection(sql注入)

Fortify漏洞之Sql Injection&#xff08;sql注入&#xff09; 前言 本篇先对Fortify做个简单的认识&#xff0c;同时总结一下sql注入的漏洞&#xff01; 一、Fortify软件介绍 Fortify是一款能扫描分析代码漏洞的强大工具&#xff0c;是由一家加州软件安全厂商开发而成&#…

为什么要为IP地址申请SSL证书?

在不断发展的互联网世界中&#xff0c;网络安全越来越受到重视&#xff0c;这不仅是因为相关法律法规政策的实施&#xff0c;还因为确保网络安全可以为企业减少财产损失。而确保企业在线业务安全的关键一点&#xff0c;就是SSL证书的部署&#xff0c;SSL证书不仅可以加密数据&a…

Unity中Shader雾效在场景中的调节技巧

文章目录 前言一、修改棋盘格Shader的Cull可以在属性面板控制1、在属性面板定义CullMode2、在SubShader中&#xff0c;使用CullMode3、这样就可以在不同剔除情况下使用棋盘格场景了 二、调节天际线颜色和雾融为一体1、在摄像机设置不渲染天空盒&#xff0c;渲染单一颜色2、采样…

如何解决大模型的「幻觉」问题?

如何解决大模型的「幻觉」问题&#xff1f; 如何解决大模型的「幻觉」问题&#xff1f;幻觉产生原因&#xff1f;模型原因数据层面 幻觉怎么评估&#xff1f;Reference-based&#xff08;基于参考信息&#xff09;基于模型的输入、预先定义的目标输出基于模型的输入 Reference-…

Elasticsearch基本操作之索引操作

本文说下Elasticsearch基本操作之索引操作 文章目录 概述创建索引创建索引示例重复创建索引示例 查看索引查看所有索引查看单个索引 删除索引删除索引 概述 由于是使用命令来操作Elasticsearch&#xff0c;可以使用kibana&#xff0c;postman和apifox等工具 我使用了apifox来执…

【bug】【VSCode】远程终端TERMINAL打不开

【bug】【VSCode】远程终端TERMINAL打不开 可能的原因现象分析解决 可能的原因 昨天晚上vscode在打开多个TERMINAL的情况下&#xff0c;挂了一晚上&#xff0c;今早上来看的时候全都lost connections…。然后关闭再打开就出现了如上现象。 早上一来到实验室就要debug… 现象…

西北工业大学计算机组成原理实验报告——verilog前两次

说明 为了有较好的可读性&#xff0c;报告仅仅粘贴关键代码。该PDF带有大纲功能&#xff0c;点击大纲中的对应标题&#xff0c;可以快速跳转。 实验目标 掌握单周期CPU执行指令的流程和原理&#xff1b;学习使用verilog HDL语言实现单周期CPU, 并通过功能仿真&#xff1b;提…

k8s之pod

pod是k8s中最小的资源管理组件 pod也是最小化运行容器化的应用的资源管理对象 pod是一个抽象的概念&#xff0c;可以理解成一个或者多个容器化应用的集合 pod可以是一个或者多个 在一个pod中运行一个容器&#xff08;最常用的方式&#xff09; 在一个pod中同时运行多个容器…

第二证券:长期布局重要窗口或至 险资看涨A股

新年伊始&#xff0c;稳妥资金对2024年权益商场出资更为达观。多家险资组织告诉上海证券报记者&#xff0c;在经历了2023年的震动调整行情后&#xff0c;2024年A股商场机遇大于危险&#xff0c;商场体现或将显着优于2023年。 详细来看&#xff0c;两方面要素支撑权益商场向好&…

总结MySQL 的一些知识点:MySQL 排序

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

[每周一更]-(第56期):不能不懂的网络知识

作为程序员&#xff0c;在网络方面具备一定的知识和技能是非常重要的。以下是一些程序员需要熟练掌握的网络知识&#xff1a; 基础网络概念&#xff1a; IP地址&#xff1a;了解IPv4和IPv6地址的格式和分配方式&#xff0c;以及常见的IP地址分类。子网掩码&#xff1a;理解子…

Vue3 使用路由 Router

Vue3 使用路由 Router 之前几篇博文说了一下 vue 的基本语法和 vue 的传参&#xff0c;今天这篇博文稍微说一下 vue3 里面使用路由。 介绍 众所周知&#xff0c;vue 是用来构建单页面应用的前端框架&#xff0c;大于大多数此类型应用来讲&#xff0c;都推荐使用官方支持的 vue…

宋仕强论道之华强北后山寨手机时代(三十六)

今天继续讲华强北山寨手机&#xff0c;跟手机配套周边产品。华强北&#xff0c;作为中国电子产品的集散地和创新中心&#xff0c;一直以来都是电子产品和数码产品的聚集地。在早期&#xff0c;赛格市场以其走私、翻新的电脑和电脑周边产品而闻名。赛格大厦以前5楼以上都是做电脑…

乒乓球廉价底板评测之五F勒布伦打法讨论

菲利克斯勒布伦的直拍打法让直板又焕发了青春&#xff0c;那他的打法又有什么特点呢&#xff1f;和中国众多直板选手的区别在哪呢&#xff1f;这篇微博我们简单分一下。 首先说下他的器材&#xff0c;纤维板中置碳&#xff0c;淘宝上的版本是碳在大芯两侧&#xff0c;是七层板&…

Unity中URP下统一不同平台下的z值

文章目录 前言一、ComputeFogFactor 来计算雾效混合因子二、UNITY_Z_0_FAR_FROM_CLIPSPACE 来统一计算不同平台下的Z值1、DirectX平台2、GL平台下&#xff08;在Unity.2022.LTS下&#xff0c;该功能没有完善)3、Opengl下 前言 在之前的文章中&#xff0c;我们实现了URP下的雾效…

电动汽车BMS PCB制板的技术分析与可制造性设计

随着电动汽车行业的迅猛发展&#xff0c;各大厂商纷纷投入巨资进行技术研发和创新。电动汽车的核心之一在于其电池管理系统&#xff08;Battery Management System, BMS&#xff09;&#xff0c;而BMS的心脏则是其印刷电路板&#xff08;PCB&#xff09;。通过这篇文章探讨电动…

Graphics Control

Graphics Control提供了一个易于使用的图形设置管理解决方案,帮助您加快开发。它附带了一个常用设置库,如分辨率、垂直同步、全屏模式、光晕、颗粒、环境光遮挡等。我们的可自定义设置面板UI预制件为您提供了一个可用的UI面板,支持完整的游戏手柄和键盘输入。图形控制还附带…

Spark---RDD介绍

文章目录 1.Spark核心编程2.RDD介绍2.1.RDD基本原理2.2 RDD特点1.弹性2.分布式 &#xff1a;数据存储在大数据集群的不同节点上3.数据集 &#xff1a;RDD封装了计算逻辑&#xff0c;并不保存数据4.数据抽象 &#xff1a;RDD是一个抽象类&#xff0c;具体实现由子类来实现5. 不可…

CCF模拟题 202312-1 仓库规划

问题描述 试题编号&#xff1a; 202312-1 试题名称&#xff1a; 仓库规划 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 512.0MB 问题描述&#xff1a; 输入格式 输出格式 样例输入 4 2 0 0 -1 -1 1 2 0 -1样例输出 3 1 0 3样例解释 Java实现代码&#xff1a; import …