牛客网 面试笔试 TOP 101  

1. 题目

描述

请写一个整数计算器,支持加减乘三种运算和括号。

数据范围:0≤∣s∣≤100,保证计算结果始终在整型范围内

要求:空间复杂度: O(n),时间复杂度 O(n)

示例1

输入:

"1+2"

返回值:

3

示例2

输入:

"(2*(3-4))*5"

返回值:

-10

示例3

输入:

"3+2*3*4-1"

返回值:

26

2. 解题思路

表达式的求值可以通过栈来完成,具体思路如下:

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python编码:哔哩哔哩_bilibili

  • Java编码:哔哩哔哩_bilibili

  • Golang编码:哔哩哔哩_bilibili

3. 编码实现

核心代码如下:

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 返回表达式的值* @param s string字符串 待计算的表达式* @return int整型*/
func solve(s string) int {// write code here// 1. 定义栈、辅助变量stack := NewStack()num := 0sign := uint8('+')// 2. 遍历字符串中的字符进行计算for i := 0; i < len(s); i++ {v := s[i]// 2.1 如果是空格,跳过if v == ' ' {continue}// 2.2 如果是数字,计算对应的值if isDigit(v) {num = num*10 + int(v-'0')}// 2.3 如果是 左括号 对括号里的内容进行计算(递归)if v == '(' {j := i + 1countPartition := 1for countPartition > 0 {if s[j] == '(' {countPartition++}if s[j] == ')' {countPartition--}j++}//递归求解括号里的内容,递归的字符串为:s[i+1,j-1),左闭右开num = solve(s[i+1 : j-1])i = j - 1 // 控制循环变量值:i 更改 (for循环结束一轮,i值会再加1)}// 2.4 如果是运算符,进行运算(入栈的数字已经是计算过的)if !isDigit(v) || i == len(s)-1 {if sign == '+' {stack.Push(num) //加号 直接入栈} else if sign == '-' {stack.Push(-1 * num) //减号,入栈的是负数} else if sign == '*' {tmp := stack.Pop()stack.Push(tmp * num)} else if sign == '/' {tmp := stack.Pop()stack.Push(tmp / num)} else {}num = 0sign = v}}//3.将栈中的数据累加返回res := 0for !stack.isEmpty() {res += stack.Pop() //如果栈非空,对栈中的值求和}return res
}func isDigit(v uint8) bool {if v >= '0' && v <= '9' {return true}return false
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python编码:Python数据结构LeetCode笔试面试算法_哔哩哔哩_bilibiliPython数据结构LeetCode笔试面试算法,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1372872

  • Java编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367926

  • Golang编码:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364952

4.小结

表达式的求值可以通过栈来完成,具体操作方法为:

1. 定义一个栈,栈中保存求值的结果;

2. 依次遍历运算字符串:

        1)如果字符是数字,通过变量保存该数字;

        2)如果是括号,截取括号中的字符串递归调用;

        3)如果是运算符,进行入栈操作:加号直接入栈;减号入栈为负数;乘号则与出栈的值相乘再入栈;除号则与出栈的值相除再入栈(乘除的优先级高,因此需要先出栈操作之后再入栈)。

3. 计算结果:

        将栈中的值进行累加,就是表达式的值。

《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:

  ✅   链表

  ✅   二叉树

  ✅   二分查找、排序

  ✅   堆、栈、队列

  ✅   回溯算法

  ✅   哈希算法

  ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:Python数据结构LeetCode笔试面试算法_哔哩哔哩_bilibiliPython数据结构LeetCode笔试面试算法,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ss897667807

  • Java编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ss161443488

  • Golang编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ss63997

对于数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:谁言寸草心,报得三春辉。

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

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

相关文章

小白成长之路-Nginx配置(二)

文章目录 一、localtion配置1.匹配规则2.匹配优先级3.配置案例 二、rewrite1、 语法2、 可写入字段3 配置案例4 if 指令5.sutoindex6. nginx配置中的常用变量 三、配置Nginx状态统计1.下载vts模块2.编译nginx 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参…

Qt的第一个程序

Qt的第一个程序 1.hello world2.使用图形化拖拽方式3.使用C代码的方式3.1.头文件3.2.setText3.3.对象树 4.设计MyLabel5.乱码问题 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff…

图书数据接口

基本说明&#xff1a; 接口地址&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn{isbn}&appKey{appkey}返回格式&#xff1a;json请求方式&#xff1a;get请求示例&#xff1a;http://data.isbn.work/openApi/getInfoByIsbn?isbn9787513159074&appKey…

MongoDB原理

目录 一、概念 二、架构 2.1 逻辑结构 2.2 数据模型 2.3 存储引擎&#xff1a;WiredTiger 三、事务 一、概念 MongoDB是文档数据库&#xff0c;基本存储单元是 文档&#xff08;Document&#xff09;&#xff0c;以BSON格式&#xff08;一种类json的二进制形式&#xff…

《解码音频:从基础到未来的听觉探索》

音频&#xff1a;开启声音世界的大门 在生活的每一个角落&#xff0c;音频如影随形&#xff0c;编织出丰富多彩的听觉体验。清晨&#xff0c;第一缕阳光尚未完全照进房间&#xff0c;手机里温柔的闹钟铃声&#xff0c;将我们从睡梦中轻轻唤醒&#xff0c;开启活力满满的一天。通…

web安全之h2注入系统学习

起初是在N1 Junior 2025 上面碰到一题&#xff0c;考点是h2的sql注入。由于之前没有见过&#xff0c;趁此机会系统学习一番 实验代码 public class H2Inject {public static void main(String[] args) throws Exception{JdbcDataSource dataSource new JdbcDataSource();dataS…

AWS认证系列:考点解析 - cloud trail,cloud watch,aws config

&#x1f3af;一句话总览&#xff1a; 服务名类比/角色主要功能CloudTrail监控摄像头录像回放记录“谁在什么时候做了什么操作”CloudWatch护士测体温 护士喊医生实时监控系统状态&#xff0c;并能报警/自动应对AWS Config保安巡逻 记录资产变更历史记录 AWS 资源的“配置状…

Java八股文——数据结构「数据结构篇」

了解哪些数据结构&#xff1f; 面试官您好&#xff0c;我了解并使用过多种数据结构。在我的理解中&#xff0c;数据结构可以分为几个大的类别&#xff0c;每一类都有其独特的优势和适用场景。 1. 线性结构 (Linear Structures) 这类结构的特点是数据元素之间存在一对一的线性…

C#测试调用EPPlus根据批注设置excel单元格内容

EPPlus也是常用的Excel文件操作库&#xff0c;但不同于ClosedXML&#xff0c;使用EPPlus前需要设置授权信息&#xff0c;商业应用需要设置商业授权&#xff0c;个人使用或非商业应用也需要设置授权&#xff08;测试的时候只需设置全名&#xff0c;保存excel文件时会保存到文件详…

windows本地搭建skywalking, 线程池中traceId不丢失

1.从官网下载9.0.0版本 Downloads | Apache SkyWalking 其它历史版本的 下载地址 Index of /dist/skywalking 这个页面 可以下载 apm服务: apache-skywalking-apm-9.0.0.tar.gz agent的包: apache-skywalking-java-agent-9.0.0.tgz 2.解压后, (看情况去config路径下 appli…

多模态大语言模型arxiv论文略读(135)

Agent S: An Open Agentic Framework that Uses Computers Like a Human ➡️ 论文标题&#xff1a;Agent S: An Open Agentic Framework that Uses Computers Like a Human ➡️ 论文作者&#xff1a;Saaket Agashe, Jiuzhou Han, Shuyu Gan, Jiachen Yang, Ang Li, Xin Eric…

wpa_supplicant连接到了路由,但是 udhcpc会分配到不同网段的ip,路由器ip为192.168.0网段,板子分配ip为192.168.1的网段

wpa_supplicant连接到了路由&#xff0c;但是 udhcpc会分配到不同网段的ip,路由器ip为192.168.0网段&#xff0c;板子分配ip为192.168.1的网段 你提到的情况&#xff1a; 使用 wpa_supplicant 成功连接到路由器&#xff1b; 然后通过 udhcpc&#xff08;DHCP客户端&#xff09…

[Hestia]开源网络服务器控制面板,快速、可靠、开源

测评介绍 本期测评试用一下Hestia这款面板。Hestia是一个由国际社区支持开发的开源项目&#xff0c;2019年正式发布&#xff0c;目前已积累1.1万余次代码提交&#xff0c;几乎每周都有十多次的代码提交&#xff0c;更新热度很高。仅支持比较新的debian和ubuntu&#xff0c;对于…

Windows 安装 Redis8.0.2

1.下载 Releases redis-windows/redis-windowshttps://github.com/redis-windows/redis-windows/releases 下载后直接解压到想要的安装目录就行了&#xff0c;启动Redis直接双击 redis-server.exe 文件就行了&#xff0c;Redis启动后双击 redis-cli.exe 就可以直接连接到Redi…

GitHub中openmmlab和Detectron2的区别

MMDetection 和 Detectron2 都是计算机视觉领域中流行的开源目标检测框架&#xff0c;它们有许多相似之处&#xff0c;但也存在一些关键差异。以下是两者的主要区别&#xff1a; 1. 开发团队与社区 MMDetection 由中国开源组织 OpenMMLab 开发维护&#xff0c;社区以中文用户为…

开疆智能CCLinkIE转ModbusTCP网关连接施耐德TCP从站配置案例

本案例是三菱PLC通过CCLinkIE转ModbusTCP网关连接施耐德Modicon M262 Logic/Motion Controller的配置案例 配置方法&#xff1a; 首先设置Modicon M262 Logic/Motion Controller Modbus TCP 从站设备 I/O 映射选项卡 I/O 以如下方式从主站视角映射到 Modbus 寄存器&#xff1…

【源码】Reactive 源码

前言 用了很长时间的 componsition-api 了&#xff0c;最近想看看源码&#xff0c;抱着单纯的学习心态先从 reactive 开始吧。 个人习惯&#xff1a; 看代码要带着问题去看&#xff0c;不要盲目的去看问题就是这次看源码的主线&#xff0c;要围绕着主线去展开&#xff0c;过…

银河麒麟 | ubuntu 安装国产达梦DM8数据库(安装+外网通+IDEA连接)

目录 官网下载安装 下载安装包 创建安装用户组dinstall 创建安装用户dmdba并指定组 创建DM8软件安装目录修改权限 检查、修改系统资源限制 解压.zip的压缩包 安装mount数据库 图形化安装 清除之前的挂载 开启Disql服务 修改dmdba的环境变量 检查状态 进入数据库 …

MySQL与Oracle视图:深入解析与全面对比

视图概念 视图在 MySQL 与Oracle中本质上是一种虚拟表&#xff0c;其数据并非实际存储&#xff0c;而是基于一个或多个基础表的查询结果动态生成。它像是对复杂查询的一种封装&#xff0c;极大地简化了数据的查询操作。例如&#xff0c;当我们需要频繁从多个关联表中获取特定数…

uniapp通过webview套h5时使用plus调取蓝牙/usb打印

安卓使用usb调取打印机 /*** 安卓usb调取打印机*param { string | bytes[] } html 传入的打印内容*传入一段文本或一个bytes数组* returns*/ export const printUsb (html) > {return new Promise((resolve, reject) > {if (!window.plus) return reject(new Error(&qu…