2024.9.9 Python,有效的括号,三数之和,回溯算法解决括号生成

1.有效的括号

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([])”
输出:true
方法一:我的方法,遇见就删库

class Solution:def isValid(self, s: str) -> bool:stack=[]n=len(s)if len(s)%2!=0:return Falsefor i in range(n):if s[i] in ('(', '[', '{'):stack.append(s[i])elif s[i] in (')', ']', '}'):if not stack:return Falseelif s[i]==')' and stack[-1]=='(':stack.pop()elif s[i]==']' and stack[-1]=='[':stack.pop()elif s[i]=='}' and stack[-1]=='{':stack.pop()else:return False                if not stack:return Trueelse:return False                

方法二:字典:

class Solution:def isValid(self,s:str)->bool:if len(s)%2==1:return Falsepairs={')':'(',']':'[','}':'{'}stack=list()for ch in s:if ch in pairs:if not stack or stack[-1] !=pairs[ch]:return Falsestack.pop()else:stack.append(ch)return not stack

这个代码的的逻辑很明显比我的要好,逻辑非常的清晰,我的逻辑包络了所有的可能性,但是不够合理,他的逻辑是使用字典,配对的理念确实很好。

2.合并两个有序数组

这个题很简单,主要是这里有一个要求

class Solution:def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:"""Do not return anything, modify nums1 in-place instead."""res=[]index1,index2=0,0while index1<m and index2<n:if nums1[index1]<=nums2[index2]:res.append(nums1[index1])  index1+=1else:res.append(nums2[index2])  index2+=1  res+=nums1[index1:m] if index2==n else nums2[index2:n]nums1[:m+n]=res

他说do not return anything, 要求修改nums1。但是他的测试用例其实是在背后直接读原地址的,所以还是要修改原数列。nums1[:m+n]=res就可以了。

3.三数之和

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort()res=[]for first in range(len(nums)-2):if first>0 and nums[first]==nums[first-1]:continuethird=len(nums)-1second=first+1while third>second:if second>first+1 and nums[second]==nums[second-1]:second+=1continueif third<len(nums)-1 and nums[third]==nums[third+1]:third-=1continueans=nums[first]+nums[second]+nums[third]if ans==0:res.append([nums[first],nums[second],nums[third]])third-=1elif ans>0:third-=1else: #ans<0:second+=1return res

技术要点:
1.要对first进行限制,如果遇到同样的数字,那么就跳过
2.third为最后一个数字,second为first之后第一个数字
3.循环条件是second要小于third,对ans进行判断,如果小于,那就second放大,如果大于,那就third调小,如果相等,那就记录并且第三个降一个,也可以third和second同时降,这样的用时反而会更少。

4.括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
示例 2:
输入:n = 1
输出:[“()”]

from typing import List
class Solution:def generateParenthesis(self, n: int) -> List[str]:def dfs(ans,remaining):if len(ans)==n*2:if check(ans):if ans not in res:res.append(ans)ans=''returnelse:returnelse: returnfor i in range(len(remaining)):dfs(ans+remaining[i],remaining[:i]+remaining[i+1:])  def check(s:str)->bool:stack=[]for i in range(len(s)):if not stack:stack.append(s[0])continueif stack[-1]==')':return Falseelse:if s[i]==')':stack.pop()if s[i]=='(':stack.append('(')return not stackres=[]dfs('','()'*n)return res

我自己的办法,有太多太多的无用功了,超时
方法二:回溯算法:

class Solution:def generateParenthesis(self,n:int)->List[str]:res=[]S=''def backtrack(S,left,right):if len(S)==2*n:res.append(''.join(S))returnif left<n:S.append('(')backtrack(S,left+1,right)S.pop()if right<left:S.append(')')backtrack(S,left,right+1)S.pop()backtrack([],0,0)return res    		

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

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

相关文章

使用Protocol Buffers传输数据

使用 Google Protocol Buffers&#xff08;ProtoBuf&#xff09;与 Kafka 结合来定义和传输数据&#xff0c;可以确保传输数据的结构性、可扩展性和高效性。以下是一个简单的步骤指南&#xff0c;帮助你实现生产者和消费者。 1. 定义 ProtoBuf 消息格式 首先&#xff0c;你需…

笔记整理—内核!启动!—kernel部分(3)init进程—进程1

内核态下干了什么——构建内核。 在init进程中&#xff0c;一个进程有两种状态。1为内核态&#xff0c;init属于内核进程。2.用户态&#xff0c;自己将init转为用户态。从进程1之后的进程就都可以工作在用户态。 内核态中重点干了一件事情&#xff0c;挂载rootfs&#xff0c;找…

ffmpeg 视频编码及基本知识

理论 H264编码原理&#xff08;简略&#xff09; 1. 视频为什么需要进行编码压缩 降低视频数据大小&#xff0c;方便存储和传输 2. 为什么压缩的原始数据采用YUV格式 彩色图像的格式是 RGB 的&#xff0c;但RGB 三个颜色是有相关性的。 采用YUV格式&#xff0c;利用人对图像的…

【C语言必学知识点七】什么?还有人不知道什么是柔性数组?还不速来!!!

动态内存管理——详细解读柔性数组 导读一、什么是柔性数组二、柔性数组的特点三、柔性数组的使用四、柔性数组的优势结语 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 在上一篇内容中我们介绍了C/C程序中的内存分区&#xff0c;在C/C…

C++11 --- 可变参数模板

序言 不知道大家有没有细细研究过在 C 语言 中的 printf 函数&#xff0c;也许我们经常使用他&#xff0c;但是我们可能并不是那么了解他。先看一下调用格式&#xff1a;int printf ( const char * format, ... );&#xff0c;在这里的 format 代表我们的输出格式&#xff0c;后…

欧拉下搭建第三方软件仓库—docker

1.创建新的文件内容 切换目录到etc底下的yum.repos.d目录&#xff0c;创建docker-ce.repo文件 [rootlocalhost yum.repos.d]# cd /etc/yum.repos.d/ [rootlocalhost yum.repos.d]# vim docker-ce.repo 编辑文件,使用阿里源镜像源&#xff0c;镜像源在编辑中需要单独复制 h…

华为防火墙 nat64

如果设备接收到的IPv6报文的前缀是设备为NAT64定义的前缀&#xff0c;说明报文的目的地址是IPv4网络&#xff0c;报文将经过NAT64处理后被转发至IPv4网络。 如果设备接收到的IPv6报文的前缀不是设备为NAT64定义的前缀&#xff0c;说明报文的目的地址是IPv6网络&#xff0c;报文…

java直接实例化对象和使用接口实例化对象之间的区别(java小知识点)

文章目录 1.定义一个MyClass类和一个 MyInterface接口2.具体使用场景3.如何调用 MyClass 自己的特有方法&#xff1f;4.总结 1.定义一个MyClass类和一个 MyInterface接口 public interface MyInterface {void doSomething(); // 权限修饰符默认是public }public class MyClass…

设计模式 | 单例模式

定义 单例设计模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这种模式常用于需要控制对某些资源的访问的场景&#xff0c;例如数据库连接、日志记录等。 单例模式涉…

网站钓鱼——挂马技术手段介绍

更多网安实战内容&#xff0c;可前往无问社区查看http://wwlib.cn/index.php/artread/artid/10194.html 网站挂马目前已经成为流氓软件以及红队人员快速获取目标主机权限的常用手段之一&#xff0c;在长时间的实战中也是出现了层出不穷的钓鱼方法&#xff0c;这次分享一下实际…

【北京迅为】《STM32MP157开发板使用手册》-第十三章 编译QtE5.12文件系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

内网中的RDP利用

学习参考 https://www.freebuf.com/articles/network/276242.html能跟着实操的都实操一下。熟悉一些命令&#xff0c;过程。 实验环境&#xff1a;win2008&#xff0c;192.168.72.139 两个用户&#xff1a; administrator&#xff0c;shizuru RDP服务 确定/开启 RDP服务确…

Chainlit集成Mem0使用一个拥有个性化AI记忆的网页聊天应用

前言 Mem0 简介&#xff0c;可以看我上一篇文章《解决LLM的永久记忆的解决方案-Mem0实现个性化AI永久记忆功能》。本篇文章是对Mem0 实战使用的一个示例。通过Chainlit 快速实现ui界面和open ai的接入&#xff0c;通过使用Mem0 实现对聊天者的对话记录的记忆。 设计实现基本原…

828华为云征文|部署多媒体流媒体平台 Plex

828华为云征文&#xff5c;部署多媒体流媒体平台 Plex 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 性能模式1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Plex3.1 Plex 介绍3.2 Docker 环境搭建3.3 Plex 部署3.4 Plex 使…

张家辉新作《重生》内地票房逆袭

由张家辉领衔主演的电影《重生》在票房大获成功&#xff0c;击败多部同期中西强片&#xff0c;成为今年暑期档的最大黑马。张家辉在片中饰演的角色原本拥有幸福家庭&#xff0c;为了复仇走上亡命之徒的道路&#xff0c;影片中他再度展现了影帝级别的演技&#xff0c;受到网民和…

CCF推荐A类会议和期刊总结(计算机网络领域)- 2022

CCF推荐A类会议和期刊总结&#xff08;计算机网络领域&#xff09;- 2022 在中国计算机学会&#xff08;CCF&#xff09;的推荐体系中&#xff0c;A类会议和期刊代表着计算机网络领域的顶尖水平。这些会议和期刊不仅汇集了全球顶尖的研究成果&#xff0c;还引领着该领域的前沿发…

合碳智能 × Milvus:探索化学合成新境界——逆合成路线设计

合碳智能&#xff08;C12.ai&#xff09;成立于2022年&#xff0c;致力于运用AI和具身智能技术&#xff0c;为药物研发实验室提供新一代智能化解决方案&#xff0c;推动实验室从自动化迈向智能化&#xff0c;突破传统实验模式与人员的依赖&#xff0c;解决效率和成本的瓶颈&…

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

解决浏览器自动将http网址转https

删除浏览器自动使用https的方式 在浏览器地址栏输入&#xff1a;chrome://net-internals/#hsts PS:如果是edge浏览器可输入&#xff1a;edge://net-internals/#hsts 在Delete domain security policies搜索框下&#xff0c;输入要删除的域名,然后点击delete 解决方法&#…

linux系统下PostgreSQL的使用

文章目录 前言一、安装pgsql数据库二、安装c和c驱动三、使用1、头文件2、源文件3、main文件4、编译 前言 最近工作中使用到了pgsql,主要是使用其c驱动完成数据库创建及增删改查等操作… 一、安装pgsql数据库 使用命令如下: sudo apt-get install postgresql安装完成,使用如…