题目

https://leetcode.com/problems/basic-calculator/

题解

中缀表达式求值,之前学数据结构的笔记:

class Solution {public int calculate(String s) {if (s.trim().startsWith("-")) s = "0" + s;Stack<Integer> numStack = new Stack<>();Stack<Character> opStack = new Stack<>();int cur = 0;boolean pending = false;for (char c : s.toCharArray()) {if (c == ' ') {// pass} else if (c == '(') {if (pending) {numStack.push(cur);cur = 0;pending = false;}opStack.push(c);} else if (c == ')') {if (pending) {numStack.push(cur);cur = 0;pending = false;}char op = opStack.pop();while (op != '(') {int b = numStack.pop();int a = numStack.pop();numStack.push(cal(a, b, op));op = opStack.pop();}} else if (c >= '0' && c <= '9') {cur *= 10;cur += c - '0';pending = true;} else {if (pending) {numStack.push(cur);cur = 0;pending = false;}if (!opStack.isEmpty() && opStack.peek() != '(') {char op = opStack.pop();int b = numStack.pop();int a = numStack.pop();numStack.push(cal(a, b, op));}opStack.push(c);}}if (pending) {numStack.push(cur);}if (!opStack.isEmpty()) {char op = opStack.pop();int b = numStack.pop();int a = numStack.pop();numStack.push(cal(a, b, op));}return numStack.pop();}public int cal(int a, int b, char op) {return op == '+' ? a + b : a - b;}
}

leetcode 224. Basic Calculator | 224. 基本计算器(中缀表达式求值)相关推荐

  1. leetcode 227. Basic Calculator II | 227. 基本计算器 II(中缀表达式求值)

    题目 https://leetcode.com/problems/basic-calculator-ii/ 题解 这道题是 中缀表达式求值 的简化版(因为没有左右括号运算),不过输入的形式有两个处理起 ...

  2. leetcode 282. Expression Add Operators | 282. 给表达式添加运算符(中缀表达式求值)

    题目 https://leetcode.com/problems/expression-add-operators/description/ 题解 中缀表达式求值问题,参考:leetcode 227. ...

  3. DSOJ 中缀表达式求值

    题目链接 #include<stdio.h> //中缀表达式求值 #include<string.h> #include<stdlib.h> #define MAX ...

  4. C++代码实现中缀表达式求值(基于中缀表达式转后缀表达式)

    C++代码实现中缀表达式求值(基于中缀表达式转后缀表达式) 样例输入:3*(2+5) 样例输出:21 代码:#include <bits/stdc++.h> using namespace ...

  5. Python实现中缀表达式求值

    一.思路 有些类似于先把中缀表达式转化为后缀表达式,然后再对后缀表达式求值.但是因为我们最终只需要求出来的值,不想得到后缀表达式,所以就一边遍历一边计算了.关键点在于,我们借助两个栈,一个栈存放操作数 ...

  6. 栈应用:中缀表达式求值

    后缀表达式求值比较简单,基本过程为:遇到数字则进栈,遇到运算符则出栈俩数字然后计算结果,再把结果入栈,过程比较简单,不再复习了,下面着重记录中缀表达式求值 中缀表达式求值可以先将中缀转后缀,再用后缀计 ...

  7. 计算器软件----表达式求值

    学完栈写了一个计算器小程序, 基本功能如下: 1.支持基本的+ - * / % 运算 2.支持sin.cos.tan.ln.log.乘方(^).开方(sqrt).指数(exp) 求值 3.支持括号及括 ...

  8. c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...

    文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...

  9. c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)

    第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...

最新文章

  1. 图像检索中为什么仍用BOW和LSH
  2. 不同编程语言的初心和适用对象
  3. docker镜像为什么要采用分层结构
  4. mysql死锁分析_MySQL死锁分析
  5. 【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)
  6. TypeError: cannot unpack non-iterable NoneType object
  7. python的多行语句可以使用反斜杠_python 为什么不用分号作终止符?
  8. 使用jsonEditor打造一个复杂json编辑器
  9. 【ElasticSearch】ElasticSearch 6 IK 同义词 配置
  10. Webpack 实现 Tree shaking 的前世今生
  11. Flex Builder 中视图状态
  12. 2021年下半年软件设计师下午真题及答案解析
  13. 油猴+百度网盘+加速
  14. 数据可视化大屏案例系列 2
  15. css3直线运动_纯CSS3炫酷元素边框线条动画特效
  16. 抗击疫情 融云在行动
  17. destoon ajax_area_select,destoon城市地区两级联动
  18. i标签和em标签的区别
  19. SigFox与LoRa技术原理、应用场景和商业模式上的比较
  20. APK无法识别gsensor问题剖析

热门文章

  1. 中石油训练赛 - sciorz画画(区间dp)
  2. (转)三大博弈定义+结论
  3. TensorFlow2-高层API接口Keras
  4. 视频异常检测算法 python_使用Python进行异常检测
  5. JSP中的include指令
  6. C/C++中调用api设置mysql连接的编码方式
  7. STL 之map,multimap
  8. live555 源码分析:简介
  9. 使用 frida+dexdump对apk脱壳
  10. Golang之变量去哪儿