学院打卡第十四天

news2024/11/29 4:32:43

今天是一道困难题,难得有困难题!!

如题:

但是这个困难题感觉也不是很”困难“!!!

算法思想:

第一感觉就是利用栈的思想,这种题做多了,一看见就是想到栈!!!果然真行!!!

---初始化2个栈,一个symbol装运算符!,&,|。一个nums装括号以及t,f。

---然后遍历字符串

---当遇到逗号  ,  直接跳过 

---遇到运算符,直接装入symbol

---当遇到   (   、 t、    和  f  直接装入nums栈中,t和f要分别转换为True和False装入!

----遇到右括号 )   就要分情况讨论了!!!!

               (1)symbol栈出一个元素,如果是 !,那么nums肯定只要出一个字符和左括号进行not 运算

                (2)如果是&则定义num初始值为True,如果是|则定义初始值为False,然后对nums进行出栈操作直到栈顶为左括号,每出来一个与num进行对应的运算并且重新赋值给num

                (3)最后把左括号出栈,把得出的结果num再入栈

---结束循环的时候,返回nums中的第一个元素(也只剩一个元素了!)

代码:(有一些细节在代码注释里提到!)

class Solution:
    def parseBoolExpr(self, expression: str) -> bool:
        nums, symbols = [], []
        for i in expression:
            if i == "&" or i == "|" or i == "!":
                symbols.append(i)
            elif i == ",":
                continue
            else:
                if i == ")":
                    sym = symbols.pop()#先得出运算符
                    if sym=="!":
                        num=not nums.pop()
                    elif sym=="&":
                        num=True
                        while len(nums)!=0 and nums[-1]!="(":
                            num=nums.pop() and num#nums.pop()要放前面,防止num是false直接跳过nums.pop()进入死循环!
                    else:
                        num=False
                        while len(nums)!=0 and nums[-1]!="(":
                            num=nums.pop() or num #nums.pop()要放前面,防止num是true直接没有去nums.pop()进入死循环!!!!
                    nums.pop()#左括号出栈
                    nums.append(num)#结果入栈
                else:
                    if i=="f":
                        nums.append(False)
                    elif i=="t":
                        nums.append(True)
                    else:
                        nums.append(i)
        return nums[0]

运行结果:

今天的打卡完成啦!!!

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

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

相关文章

2021年上半年软件设计师下午真题及答案解析(三)

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 【说明】 某中医医院拟开发一套线上抓药APP,允许患者凭借该医院医生开具的处方线上抓药,并提供免费送药上门服务。该系统的主要功能描述如下: &#…

Kotlin编程实战——概述(01)

一 概述 Kotlin用于服务器开发Kotlin 进行 Android 开发Kotlin 用于 JavaScript 开发Kotlin 用于原生开发Kotlin 用于数据科学协程多平台 二 Kotlin用于服务器开发 2.1 原因 表现力可伸缩性互操作性迁移迁移工具学习曲线 2.2 Kotlin 进行服务器端开发的框架 Spring、Vert.…

Premiere 出现“该级别的帧大小/帧速率无效。请减小视频范围或帧速率,或者增加配置文件和级别,然后重试”的解决办法

有时候我们需要制作一定纵横比的视频,比如设置画面大小为1080(水平)1920(垂直)的竖屏尺寸,但是最近我导出视频时发现了 “该级别的帧大小/帧速率无效。请减小视频范围或帧速率,或者增加配置文件和级别,然后重试” 这个问题&#x…

使用插值法公式组成数字电路进行计算的计算机

使用插值法公式组成数字电路进行计算的计算机 使用插值法公式组成数字电路进行计算的计算机是一种可以使用插值法计算积分值,导数值,函数值的数字计算机,它由按键,液晶显示器,中央处理器组成。按键输入的程序保存在磁带…

【CUDA编程】CUDA内存模型

文章目录1. 内存结构2. GPU device内存2.1 寄存器(Registers)2.2 本地内存(Local Memory)2.3 共享内存(Shared Memory)2.4 常量内存(Constant Memory)2.5 纹理内存(Texture Memory)2.6 全局内存(Global Memory)3. CPU Host内存1. 内存结构 在CUDA中可编程内存的类型有&#xf…

文件管理的功能

文章目录什么是文件文件的属性文件内部的数据如何组织起来文件之间应该如何组织起来操作系统应该向上提供哪些功能从上往下看,文件应该如何存放在外存其他需要由操作系统实现的文件管理功能什么是文件 文件就是一组有意义的信息/数据集合 文件的属性 文件名&#x…

万字手撕AVL树 | 上百行的旋转你真的会了吗?【超用心超详细图文解释 | 一篇学会AVL】

说在前面 今天这篇博客,是博主今年以来最最用心的一篇博客。我们也很久没有更新数据结构系列了,几个月前博主用心深入的学习了这颗二叉平衡搜索树,博主被它的查找效率深深吸引。 AVL树出自1962年中的一篇论文《An_algorithm_for_the_organi…

计算机毕业设计(附源码)python职业高中智慧教学系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

ASCII纯文本绘制流程图

我们使用纯文本写代码,有了Markdown又可以使用纯文本写文档,那么图片,能不能使用纯文本描述呢? Text Flow是什么? Text Flow:一个强大的在线ASCII流程图绘制工具,是程序员大佬们很喜爱的制作流…

【AI绘图】咒术师的评级指南

成为咒术师之路 python版本要选用3.9.7 C盘或系统缓存目录预留5G空间 咒术师评级 以下内容仅供参考。。 三级咒术师 理解咒言的使用,正向咒言,逆向咒言,构图要素的表达 二级咒术师 能够对咒物做后期调整,校正手部 一级咒术师…

Redis

1.概念:redis是一款高性能的NOSQL系列的非关系型数据库 关系型数据库:数据之间有关联关系,数据存储在硬盘的文件上 非关系型数据库:数据之间没有关联关系,数据存储在内存中 是一款用C语言开发…

猿创征文|一文吃透JAVA初学者的开发工具

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:乐趣国学的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:CSDN活动专…

【算法】网络最大流问题,三次尝试以失败告终

文章目录开始基本思路:“反悔”机制干活尝试一:深度优先搜索尝试二:少走弯路尝试三:最短增广路径,广度优先还是没ac记两个小bug1. 数组越界2. 写错变量名小结最后一个版本的代码(C)定义类与函数…

谷雨妹子要出国

文 / 谷雨(微信公众号:王不留) 作为出差在外的实施团队中的唯一一位女生,我可以独享一个单间,晚上的备考时候不会受影响,心里倒有点美嗞嗞的。 目前工作状态是 996(早上九点到晚上九点&#xf…

常用短信平台一览,记得收藏哦

市面上的短信平台很杂很多,小到几个人的公司、大到腾讯、阿里这样的巨无霸都在做,但常用的就那么几个,因而用户的选择也存在不少的困惑。 在我看来,我觉得选择短信平台、在我看来有这几个需要的注意地方: 1、价格 无论…

Java:Session 会话详解

在介绍本篇的主角之前, 我们先复习一下 Cookie 为了实现在游览器的持久性存储和安全性考虑, 游览器提供了一个机制—— Cookie , Cookie 的储存空间很有限, 不同的游览器Cookie空间上限也不同, 一般总上限是 4k 个字节左右 (例如 Firefox), 其储存也只是按照域名进行分块存储, …

在众多编程语言中,我为什么要学Python?

前言 编程语言排行榜三剑客Java、C、C,长期统治榜首,今日python重回榜首 (文末送福利) python的前世今生 1、最新动态 TIOBE排行榜是根据互联网上有经验的程序员、课程和第三方厂商的数量,并使用搜索引擎&#xff…

【算法篇-动态规划】手撕各大背包问题 —— 01背包

背包问题1. 最基础的背包 —— 01背包 (必看)1.1 分析1.2 状态转移方程 和 边界条件1.3 代码1.3.1 代码模拟1.4 空间复杂度的优化1.4.1 错误的优化方式1.4.2 正确的优化方式1.5 终极版优化总结本文章参考自 B站 董晓算法 董晓算法 1. 最基础的背包 ——…

Linux下git和gdb的使用

🚀每日鸡汤:生活不相信眼泪,即使你把眼泪流成珍珠,灰暗的生活也不会因此而闪光。 目录 一、使用git命令行 1.1安装git、配置仓库 Ⅰ.gitignore Ⅱ.git 1.2git的基本使用 二、Linux调试器-gdb 2.1、gdb的使用 2.2、 debug与…

矩阵求导简记

很多机器学习算法都需要求解最值,比如最小二乘法求解样本空间相对拟合曲线的最短距离,最值的求解往往通过求导来计算,而机器学习中又常用矩阵来处理数据,所以很多时候会涉及到矩阵的求导。矩阵求导就像是线性代数和微积分的结合&a…