您的位置:首页 > 娱乐 > 明星 > 福州疫情最新消息今天封城了_网页设计制作费用多少_南宁seo结算_网站搭建需要什么

福州疫情最新消息今天封城了_网页设计制作费用多少_南宁seo结算_网站搭建需要什么

2024/12/23 13:51:42 来源:https://blog.csdn.net/weixin_51172489/article/details/142559841  浏览:    关键词:福州疫情最新消息今天封城了_网页设计制作费用多少_南宁seo结算_网站搭建需要什么
福州疫情最新消息今天封城了_网页设计制作费用多少_南宁seo结算_网站搭建需要什么

224. 基本计算器

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

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

示例1:
输入: ( s=“1+1” )
输出: 2

示例2:
输入: ( s=“2-1+2” )
输出: 3

示例3:
输入: ( s=“(1+(4+5+2)-3)+(6+8)” )
输出: 23

提示:

  • ( 1 \leq s.length \leq 3 \times 10^5 )
  • s由数字、‘+’、‘-’、‘(’、‘)’、和空格组成
  • s表示一个有效的表达式
  • '+'不能用作一元运算(例如,“+1"和”+(2+3)"无效)
  • '-'可以用作一元运算(即"-1"和"-(2+3)"是有效的)
  • 输入中不存在两个连续的操作符
  • 每个数字和运行的计算将适合于一个有符号的 32位整数
class Solution {public int calculate(String s) {Deque<Integer> stack = new ArrayDeque<>();stack.push(1);int v = 1;int ans = 0;int i = 0;while (i < s.length()) {char c = s.charAt(i);// 只处理非空格if (c != ' ') {if (c == '+') {v = stack.peek();} else if (c == '-') {v = -stack.peek();} else if (c == '(') {stack.push(v);} else if (c == ')') {stack.pop();} else {int num = 0;while (i < s.length() && Character.isDigit(s.charAt(i))) {num = num * 10 + s.charAt(i) - '0';i++;}ans = ans + v * num;continue;}}i++;}return ans;}
}

解题思路:这道题的官方题解写得比较绕,虽然是使用栈的方法解题,但是并不需要将具体需要计算的数字压入栈中。栈只对加减号±操作,使用栈结构将所有的括号去除,例如-(1-(2-(3-4)))其实可以化简为-1+2-3+4此时直接扫描计算即可,每当遇到正负号和左右括号时都需要对栈做相关的处理,遇到+时当前位置真正的运算符号和栈顶符号相同,-时相反。遇到时将符号压入栈中,时出栈。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com