Leetcode 227-基本计算器 II

news/2025/2/22 16:02:01/

题解

本题不包含括号,比较简单

双栈法(运算符栈+数字栈)

对于「任何表达式」而言,可以都使用两个栈 nums 和 ops(本题只用到了nums):
nums : 存放所有的数字
ops :存放所有的数字以外的操作

然后从前往后做,对遍历到的字符做分情况讨论:
1.空格 : 跳过
2.数字 : 从当前位置开始继续往后取,将整一个连续数字整体取出,加入 nums
num=num*10+(c[i]-‘0’)
细节:
对于第一个数字,其之前的运算符视为加号
若读到一个运算符,或者遍历到字符串末尾,即认为是遍历到了数字末尾
3.+ - * / ^ % :
1)遇到符号说明之前的数字遍历结束了,之前的数字num和符号preSign就要经过计算存进栈中:
乘除号:计算数字与栈顶元素,并将栈顶元素替换为计算结果。
加号:将数字压入栈;
减号:将数字的相反数压入栈;
2)将当前的符号更新为preSign,将nums置为0

class Solution {public int calculate(String s) {//数字num是和已有的运算符sign做计算Stack<Integer> nums=new Stack<>();//Stack<Character> ops=new Stack<>();char[] str=s.toCharArray();//对于第一个数字,其之前的运算符视为加号char preSign = '+';//记录当前数字大小int num=0;for(int i=0;i<str.length;i++){char c=str[i];if(c>='0'&&c<='9'){num=num*10+(c-'0');}//1.c不为数字,且不为空-->c是计算符号 2.遍历到了字符串末尾//以上情况说明前面的数字遍历结束了,遇到了下一个符号,要对前面的数字和字符做计算,计算完后再用计算结果更新数字栈,用当前字符更新符号栈//注意:这里一定不能和上面的if(c>'0'&&c<'9')是if..else的关系,否则最后一个数字只会进入上一个if,不会判断是否i==str.length-1if(!Character.isDigit(c) && s.charAt(i) != ' '||i == str.length-1){switch(preSign){case '+':nums.push(num);break;case '-':nums.push(-num);break;case '*':nums.push(nums.pop()*num);break;case '/':nums.push(nums.pop()/num);break;}// 更新符号为当前符号,数字清零preSign=c;num=0;}}// 将栈中所有结果求和就是答案int res = 0;while (!nums.isEmpty()) {res += nums.pop();}return res;}
}

http://www.ppmy.cn/news/1573735.html

相关文章

写一个python组件

写一个python组件 核心功能代码命令行接口打包配置安装与测试注意 写一个python组件&#xff0c;具体的&#xff1a;项目结构设计&#xff1a;定义你的项目的目录结构。编写核心功能代码&#xff1a;实现你想要的功能。创建命令行接口(CLI)&#xff1a;使用argparse或click库来…

如何禁止本地网络访问抖音?

互联网各领域资料分享专区(不定期更新): Sheet 正文 要禁止本地网络访问某APP,可以通过以下方法实现,具体操作取决于网络环境和设备类型: 一、通过路由器设置屏蔽某APP 登录路由器管理界面 进入路由器后台(通常通过浏览器输入路由器IP地址,如192.168.1.1),输入管理员账…

Flutter 状态管理:详细分析与实战

Flutter 状态管理&#xff1a;详细分析与实战 在 Flutter 中&#xff0c;状态管理是开发复杂应用的核心。随着应用规模的增长&#xff0c;管理状态变得越来越重要。无论是简单的局部状态&#xff0c;还是复杂的全局状态&#xff0c;选择合适的状态管理方案可以显著提高开发效率…

计算机视觉算法实战——图像合成(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ✨✨1. 图像合成领域简介✨✨ 图像合成是计算机视觉中的一个重要研究方向&#xff0c;旨在通过算法生成或修改图像内容。图像合成技术广泛应…

如何解决服务器端口被攻击:全面防护与快速响应

服务器端口被攻击是网络安全中常见的问题之一&#xff0c;尤其是当服务器暴露在公共网络上时&#xff0c;容易成为黑客的目标。攻击者可能通过扫描开放端口、利用漏洞或发动拒绝服务&#xff08;DoS/DDoS&#xff09;攻击来破坏服务器的正常运行。本文将详细介绍如何检测、防御…

组合模式 Composite Pattern

https://en.wikipedia.org/wiki/Composite_pattern 组合模式是一种结构型设计模式。组合模式描述了一组对象&#xff0c;这些对象被视为同一类型对象的单个实例。组合的目的是将对象“组合「compose」”成树结构&#xff0c;以表示部分-整体层次结构。实现组合模式可以让客户端…

【系统架构】分布式事务模型详解

1. 分布式基础理论 1.1 CAP理论 CAP 理论可以表述为&#xff0c;一个分布式系统最多只能同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition Tolerance&#xff09;这三项中的两项。 一致性是…

win11 终端乱码导致IDE 各种输出也乱码

因为 win11 终端乱码导致IDE 各种输出也乱码导致作者对此十分头大。所以研究了各种方法。 单独设置终端编码对 HKEY_CURRENT_USER\Console 注册表进行修改对 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processo 注册表进行修改使用命令[Console]::OutputEncoding [Syst…