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、采样…

Backtrader 文档学习-Strategy(下)

Backtrader 文档学习-Strategy&#xff08;下&#xff09; 1. 关于生存期测试 class Test_Strategy(bt.Strategy): # 策略通用初始参数params ((maperiod1, 5),(maperiod2, 20),(printlog, True), # 写入日志标志(logfilename, Test_Strategy.log), # 日志文件名(counter,…

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

如何解决大模型的「幻觉」问题&#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;提…

element ui upload 源码解析-逐行逐析

文章目录 ajax封装ajax代码ajax封装的基础知识点和基本逻辑XMLHttpRequest简介XMLHttpRequest 的基本使用步骤 upload 组件文件上传 组件封装upload.vue 组件代码代码解析renderrender解析div 属性input 属性详解input事件 props参数 datamehods 方法handleChangeuploadFilesup…

k8s之pod

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

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

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

HashMap源码解析(持续更新)

本文针对JDK8中的HashMap进行讲解。对比jdk1.7 &#xff0c;最大的不同就是数据结构使用了红黑树&#xff0c;所以其由 数组链表红黑树 组成。 版本结构哈希算法JDK1.7数组 链表使用位运算JDK1.8数组 链表 红黑树使用 ^ 将高位与低位进行异或运算 1. 成员变量-参数 // 默…

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

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

用python合并文件夹中所有excel表

你可以使用Python的pandas库和glob库来完成这个任务。以下是一个示例代码&#xff0c;它将合并指定文件夹中所有的Excel文件&#xff1a; python复制代码 import pandas as pd import glob # 指定文件夹路径 folder_path path_to_your_folder # 获取所有Excel文件 excel_file…

Python 中,改变程序的控制流 continue、break 、assert、return、try、yield、raise的理解

1、continue 语句---用于循环结构&#xff1a; 用于终止当前循环中的剩余代码&#xff0c;并跳到下一次循环的开始。continue语句通常与条件语句一起使用&#xff0c;以便在某些条件下跳过循环的剩余部分。 示例&#xff1a; for i in range(5):if i 2:continueprint(i) 0…

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

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

Vue3 使用路由 Router

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

NetCore Webapi XSRF/CSRF 跨站请求伪造过滤中间件

XSRF&#xff08;Cross-Site Request Forgery&#xff09;和CSRF&#xff08;Cross-Site Request Forgery&#xff09;是一种常见的网络攻击方式&#xff0c;攻击者通过伪造请求将恶意操作发送到用户正在访问的网站。为了防止这种攻击&#xff0c;可以采取以下措施&#xff1a;…

MySQL中的表锁,行锁,排它锁,共享锁

表锁与行锁 1 &#xff09; 概念 在使用mysql的时候&#xff0c;如果同时向 mysql 里边批量进行更新, 插入或删除动作数据库里的数据不会出问题, 在 mysql内部&#xff0c;它其实自带了一个锁的功能而它内部有的是用了锁&#xff0c;有的没有用锁&#xff0c;没用锁的需要咱们…