基本计算器 II

文章目录

    • 题目解析
    • 解题
    • 小结

题目解析

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。

示例 1:

输入:s = “3+2*2”
输出:7
示例 2:

输入:s = " 3/2 "
输出:1
示例 3:

输入:s = " 3+5 / 2 "
输出:5

提示:

1 <= s.length <= 3 * 105
s 由整数和算符 (‘+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开
s 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内
题目数据保证答案是一个 32-bit 整数

下面是题目的链接:
基本计算器||

在这里插入图片描述

  • 解析:
    因为给定的是一个字符串s ,所以要想遍历字符串,先要将它转化成一个字符数组。我们要利用栈的性质来进行模拟算术运算,因为只有加减乘除,所以乘除的优先级是高的。先定义一个变量 op 表示运算符,当我们遇到加号和减号时,直接将加号或减号前的数字压入栈中。为了方便最后的计算,当遇到是减号时,压入栈中的数字是负的即可,这样,最后计算时,全部相加在一起就可以了。当我们遇到乘除时,将栈顶元素弹出和下一个数运算即可。还有一点,当遇到不是个位数时,我们需要继续往后遍历,tmp * 10+ss[ i ] 就可以解决这个问题。
    值得注意的是,当遇到空格时,直接 i++ 就可以跳过了。

解题

class Solution {public int calculate(String s) {char op = '+';Stack<Integer> ret = new Stack<>();int n = s.length();char[] ss = s.toCharArray();int i = 0;while (i < n){if (ss[i] == ' '){i++;} else if (ss[i] >= '0' && ss[i] <= '9') {int tmp = 0;while (i < n && ss[i] >= '0' && ss[i] <= '9'){tmp = tmp * 10 + (ss[i] - '0');i++;}if (op == '+'){ret.push(tmp);} else if (op == '-') {ret.push(-tmp);}else if (op == '*'){ret.push(ret.pop()*tmp);}else {ret.push(ret.pop()/tmp);}}else {op = ss[i];i++;}}int sum = 0;while (!ret.isEmpty()){sum += ret.pop();}return sum;}}

在这里插入图片描述

小结

对于这种模拟运算的题,都可以使用栈的优先级特性来进行解决。

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

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

相关文章

应急实战(10):Linux后门帐号

目录 1. Prepare 1.1 部署安全设备 2. Detect 2.1 设备产生告警 3. Contain 4. Eradicate 4.1 删除后门帐号 4.2 加固弱口令帐号 5. Recover 5.1 恢复帐号登录 6. Follow-Up 6.1 修改登录端口 6.2 开启命令记录 1. Prepare 1.1 部署安全设备 部署主机安全产品&#xff1a;牧云H…

Openlayer实现矢量图层点击高亮

概述 本文主要介绍如何在 Openlayers 矢量图层上实现点击高亮效果。 效果演示 具体实现 数据准备 矢量数据可点击下载 加载矢量图层 矢量数据是通过调用Openlayers的new GeoJSON()实例去加载读取。 let style = new Style({fill: new Fill({color: "rgba(255, 255,…

SldWorks问题 2. 矩阵相关接口使用上的失误

问题 在计算三维点在图纸&#xff08;DrawingDoc&#xff09;中的位置时&#xff0c;就是算不对&#xff0c;明明就4、5行代码&#xff0c;怎么看都是很“哇塞”的&#xff0c;毫无问题的。 但结果就是不对。 那就调试一下吧&#xff0c;调试后发现生成的矩阵很不对劲&#…

MySQL启动失败解决方案

目录 引言 一、查看/启动mysql服务的两种方式 方法一&#xff1a; 方法二&#xff1a; 二、修改mysql服务启动路径的地址 三、"my.ini"文件的使用 设置my.ini文件的路径 给出一个使用my.ini文件的小例子 引言 造成启动闪退\失败的原因我仅仅以个人查询的一下博…

社招高频面试题

1.单例模式 面试突击50&#xff1a;单例模式有几种写法&#xff1f; 2.Mybatis缓存机制 MyBatis的一、二级缓存查询关系 一级缓存是SqlSession级别&#xff0c;不能跨SqlSession共享&#xff0c;默认开启。 二级缓存是基于mapper namespace级别的&#xff0c;可以跨SqlSessi…

如何从零开始做自动化测试?

自动化测试是使用软件工具在应用程序上自动运行测试的过程&#xff0c;无需任何人为干预。这可以通过减少手动测试的需要来保存时间并提高软件开发过程的效率。由于人为错误或不一致性&#xff0c;手动测试可能容易出错&#xff0c;这可能导致错误未被检测到。自动化测试通过提…

Flutter SVG 图片加载速度提升 98% 的技巧

Flutter SVG 图片加载速度提升 98% 的技巧 视频 https://youtu.be/0HYtX5c6oOw https://www.bilibili.com/video/BV14ixXeJEKy/ 前言 原文 Flutter SVG 图片加载速度提升 98% 的技巧 作为许多 Flutter 开发者中的一员&#xff0c;我最初在项目中依赖 flutter_svg 包来显示 S…

Djang学习- URL反转

代码中url书写规范&#xff1a; 、 url反向解析 urls: path(test/url, views.test_url),path(test_result/<int:age>, views.test_result, name"rl") views: def test_url(request):return render(request, test_url.html)def test_result(request,age):re…

HR软件新方法,企业降本增效7大策略

ZohoPeople助力企业HR降本增效&#xff0c;通过自动化HR流程、自助服务门户、工时管理、绩效管理、轮班安排、远程工作支持及决策分析&#xff0c;提升管理效率&#xff0c;优化员工体验&#xff0c;推动企业发展。 1、自动化HR流程 对于用于大量员工的企业来说&#xff0c;HR…

【时时三省】(C语言基础)函数介绍strcat

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 strcat 字符串追加 示例&#xff1a; 比如我要把world加到hello后面去 就可以用这个 还有一种方法是这样 这两个代码的意思是一样的 只是写法不一样 写的时候要注意这些 •源字符串必须…

通俗易懂的入门 Axure RP文章 ,速学

目录 1. Axure RP简介&#xff1f; 2. Axure RP基本操作 &#xff08;1&#xff09;入门理解 &#xff08;2&#xff09;插入形状 &#xff08;3&#xff09;位置对齐、 &#xff08;4&#xff09;资源库 3. Axure RP基本交互 &#xff08;1&#xff09;切换不同的页面 …

Linux命令进阶

grep 从文件中搜索字符串 grep "字符串" 文件 参数&#xff1a; -n 显示行号 -R 递归及子目录例如 grep "hello" log.c grep "main" * -nRfind 在指定路径下搜索文件 find 路径 -name 文件名find /home/linux -name hello.c //在/home/linux…

Win10 安装 Redis 数据库

一、Redis 数据库介绍 Redis 是一个开源的高性能键值对&#xff08;key-value&#xff09;的非关系型数据库。它通常用作数据结构服务器&#xff0c;支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09;、哈希&#xff08;hashes&#xff09;、列表&a…

【大事件】国产软件出头,Web版数据库管理工具

SQLynx在今年口碑大火&#xff0c;成为数据库管理工具市场的一匹黑马。那么&#xff0c;SQLynx究竟如何&#xff1f;它究竟有哪些引人注目的优点呢&#xff1f; 首先&#xff0c;SQLynx完全免费&#xff0c;这无疑为众多用户带来了福音。在这个追求性价比的时代&#xff0c;谁…

【MySQL基础刷题】总结题型(二)

最多10题&#xff0c;再多不消化了 1.至少有5名直接下属的经理2.销售员3.订单最多的客户4.计算布尔表达式的值5.查询球队积分6.苹果和桔子7.两人之间的通话次数8.确认率9.各赛事的用户注册率 1.至少有5名直接下属的经理 注意左连接的使用 select e1.name from Employee e1 lef…

低代码框架参考

企业管理信息系统作为一类重要的应用软件系统&#xff0c;具有自己的特点&#xff0c;主要有两个方面&#xff1a; 1. 系统规模大&#xff0c;目前市场上常见的ERP系统一般都有几千个页面。 2. 页面逻辑相似性强。经过比较可以发现&#xff0c;大部分页面具有类似的功能&…

见证 RTE 的新篇章丨 RTE 年度场景 Showcase 暨第四届 RTE 创新大赛开幕

人工智能技术的快速发展&#xff0c;推动 RTE 行业持续进化&#xff0c;让实时互动场景变得更丰富、更有趣、更高效。2024 年 10 月 25 日 -26 日&#xff0c;由声网和 RTE 开发者社区联合主办的  RTE2024 第十届实时互联网大会 将在北京悠唐皇冠假日酒店正式开启&#xff0c…

精选优质不收费数据恢复软件全解析

数据已经成为了我们生活和工作中无比珍贵的资产。然而我们在使用中总会因为各种意外导致数据丢失。今天&#xff0c;我们就来深入了解一些优秀的不收费的数据恢复软件&#xff0c;看看他们如果帮我们力挽狂澜。 1.福晰数据恢复 链接直达&#xff1a;https://www.pdf365.cn/fo…

Java常见集合一条龙讲解版(结合底层原理以及面试题)

Java集合大体上可以分为俩类&#xff0c;一类是单列集合&#xff08;Collection&#xff09;&#xff0c;另一类是双列集合&#xff08;Map&#xff09;。 其中单列集合还包括俩种集合&#xff0c;一类是List&#xff0c;另一类是Set。 在Java中对于这些位级比较高的都会封装…

No.16 笔记 | SSRF(服务器端请求伪造)基础

一、SSRF基础知识 1.1 什么是SSRF&#xff1f; &#x1f50d; SSRF是"Server-Side Request Forgery"的缩写&#xff0c;中文意思是"服务器端请求伪造"。 &#x1f3ad; 简单来说&#xff1a;攻击者让服务器去访问它不应该访问的地方。 1.2 SSRF的基本模…