【LeetCode】227. Basic Calculator II
2024-10-19 15:41:35
Basic Calculator II
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5
Note: Do not use the eval
built-in library function.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
与Basic Calculator对照,
乘除法优先级高,因此一旦出现就立即计算,
到最后栈中剩下的就是顺序执行的加减计算。
先将栈逆序,再出栈计算。注意,此时的操作数先后顺序反过来。
class Solution {
public:
int calculate(string s) {
stack<int> num;
stack<char> op;
int i = ;
while(i < s.size())
{
while(i < s.size() && s[i] == ' ')
i ++;
if(i == s.size())
break;
if(s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')
{
op.push(s[i]);
i ++;
}
else
{
int n = ;
while(i < s.size() && s[i] >= '' && s[i] <= '')
{
n = n * + (s[i]-'');
i ++;
}
num.push(n);
if(!op.empty() && (op.top() == '*' || op.top() == '/'))
{
int n2 = num.top();
num.pop();
int n1 = num.top();
num.pop();
if(op.top() == '*')
num.push(n1 * n2);
else
num.push(n1 / n2);
op.pop();
}
}
}
// '+'/'-' in order
if(!op.empty())
{
// reverse num and op
stack<int> num2;
while(!num.empty())
{
num2.push(num.top());
num.pop();
}
num = num2;
stack<char> op2;
while(!op.empty())
{
op2.push(op.top());
op.pop();
}
op = op2; while(!op.empty())
{
// pay attention to the operands order!
int n1 = num.top();
num.pop();
int n2 = num.top();
num.pop();
if(op.top() == '+')
num.push(n1 + n2);
else
num.push(n1 - n2);
op.pop();
}
}
return num.top();
}
};
最新文章
- UVALive 6916---Punching Robot(卢卡斯+容斥)
- asp.net和js读取文件的MD5值的方法
- Bzoj2648 SJY摆棋子
- BestCoder Round #71 (div.2)
- HoloLens开发手记 - Unity之Spatial mapping 空间映射
- PS4 的下载速度问题
- ckeditor
- 【hoj】1604 cable master
- python中的pip安装
- Oracle-1 - :超级适合初学者的入门级笔记,CRUD,事务,约束 ......
- JAVA 第二天 关键字
- laravel中ajax,post传值问题
- orcal - 增删改
- 基于SurfaceView的可拖动视频控件
- 一次BurpSuite无法抓https包定位
- 2018 湖南网络比赛题 HDU - 6286 (容斥)
- class=";no-js";
- 包含mysql 递归查询父节点 和子节点
- Android 文件的读取和写入
- java 枚举 封装操作方法
热门文章
- Tensorflow动态seq2seq使用总结(r1.3)
- 一文学会用 Tensorflow 搭建神经网络
- C#获取程序启动目录
- 怎样将 MySQL 迁移到 MariaDB 上
- wamp设置自定义域名访问php网站
- USACO Arithmetic Progressions(暴力)
- Eclipse使用hibernate插件
- artTemplate--使用artTemplate时,由于json对象属性有特殊格式 导致调用报错artTemplate,syntax error,Template Error
- achartengine刷新数据
- 【转】开发者可以使用Docker做什么?