leetcode 224. Basic Calculator | 224. 基本计算器(中缀表达式求值)
题目
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. 基本计算器(中缀表达式求值)相关推荐
- leetcode 227. Basic Calculator II | 227. 基本计算器 II(中缀表达式求值)
题目 https://leetcode.com/problems/basic-calculator-ii/ 题解 这道题是 中缀表达式求值 的简化版(因为没有左右括号运算),不过输入的形式有两个处理起 ...
- leetcode 282. Expression Add Operators | 282. 给表达式添加运算符(中缀表达式求值)
题目 https://leetcode.com/problems/expression-add-operators/description/ 题解 中缀表达式求值问题,参考:leetcode 227. ...
- DSOJ 中缀表达式求值
题目链接 #include<stdio.h> //中缀表达式求值 #include<string.h> #include<stdlib.h> #define MAX ...
- C++代码实现中缀表达式求值(基于中缀表达式转后缀表达式)
C++代码实现中缀表达式求值(基于中缀表达式转后缀表达式) 样例输入:3*(2+5) 样例输出:21 代码:#include <bits/stdc++.h> using namespace ...
- Python实现中缀表达式求值
一.思路 有些类似于先把中缀表达式转化为后缀表达式,然后再对后缀表达式求值.但是因为我们最终只需要求出来的值,不想得到后缀表达式,所以就一边遍历一边计算了.关键点在于,我们借助两个栈,一个栈存放操作数 ...
- 栈应用:中缀表达式求值
后缀表达式求值比较简单,基本过程为:遇到数字则进栈,遇到运算符则出栈俩数字然后计算结果,再把结果入栈,过程比较简单,不再复习了,下面着重记录中缀表达式求值 中缀表达式求值可以先将中缀转后缀,再用后缀计 ...
- 计算器软件----表达式求值
学完栈写了一个计算器小程序, 基本功能如下: 1.支持基本的+ - * / % 运算 2.支持sin.cos.tan.ln.log.乘方(^).开方(sqrt).指数(exp) 求值 3.支持括号及括 ...
- c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...
文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...
- c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
最新文章
- 图像检索中为什么仍用BOW和LSH
- 不同编程语言的初心和适用对象
- docker镜像为什么要采用分层结构
- mysql死锁分析_MySQL死锁分析
- 【视觉项目】【day5】8.25号实验记录(修完BUG,28张测试图,13个样本,四张测试图误判,这比之前效果好很多了)
- TypeError: cannot unpack non-iterable NoneType object
- python的多行语句可以使用反斜杠_python 为什么不用分号作终止符?
- 使用jsonEditor打造一个复杂json编辑器
- 【ElasticSearch】ElasticSearch 6 IK 同义词 配置
- Webpack 实现 Tree shaking 的前世今生
- Flex Builder 中视图状态
- 2021年下半年软件设计师下午真题及答案解析
- 油猴+百度网盘+加速
- 数据可视化大屏案例系列 2
- css3直线运动_纯CSS3炫酷元素边框线条动画特效
- 抗击疫情 融云在行动
- destoon ajax_area_select,destoon城市地区两级联动
- i标签和em标签的区别
- SigFox与LoRa技术原理、应用场景和商业模式上的比较
- APK无法识别gsensor问题剖析