leetcode_题解_Evaluate Reverse Polish Notation逆波兰式
来源:互联网 发布:wit.ai api.ai 知乎 编辑:程序博客网 时间:2024/05/21 06:16
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9 ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
思路:使用栈来将逆序变为中序,边变边计算。参考逆波兰式相关资料:
下面以(a+b)*c为例子进行说明:(a+b)*c的逆波兰式为ab+c*,假设计算机把ab+c*按从左到右的顺序压入栈中,并且按照遇到运算符就把栈顶两个元素出栈,执行运算,得到的结果再入栈的原则来进行处理,那么ab+c*的执行结果如下:1)a入栈(0位置)2)b入栈(1位置)3)遇到运算符“+”,将a和b出栈,执行a+b的操作,得到结果d=a+b,再将d入栈(0位置)4)c入栈(1位置)5)遇到运算符“*”,将d和c出栈,执行d*c的操作,得到结果e,再将e入栈(0位置)经过以上运算,计算机就可以得到(a+b)*c的运算结果e了。逆波兰式除了可以实现上述类型的运算,它还可以派生出许多新的算法,数据结构,这就需要灵活运用了。逆波兰式只是一种序列体现形式。
class Solution {public: int evalRPN(vector<string> &tokens) { stack<string> strStack;for(vector<string>::iterator iter=tokens.begin(); iter!=tokens.end(); iter++){if(isdigit((*iter)[0]) || ((*iter)[0]=='-' && isdigit((*iter)[1])))strStack.push(*iter);else{string v1,v2,v3;v1=strStack.top();strStack.pop();v2=strStack.top();strStack.pop();int i1,i2,i3;stringstream ss;ss<<v1;ss>>i1;ss.clear();ss<<v2;ss>>i2;switch ((*iter)[0]){case '+':i3=i2+i1;break;case '-':i3=i2-i1;break;case '*':i3=i2*i1;break;case '/':i3=i2/i1;break;} ss.clear();ss<<i3;ss>>v3;strStack.push(v3);}}string resStr=strStack.top();int res;stringstream ss;ss<<resStr;ss>>res;return res; } };
0 0
- leetcode_题解_Evaluate Reverse Polish Notation逆波兰式
- leetcode第一刷_Evaluate Reverse Polish Notation
- 计算逆波兰式 Evaluate Reverse Polish Notation
- LeetCode | Evaluate Reverse Polish Notation(逆波兰式求值)
- 计算逆波兰式 (Evaluate Reverse Polish Notation)
- Evaluate Reverse Polish Notation--逆波兰式求值
- 150. Evaluate Reverse Polish Notation 逆波兰式
- 150. Evaluate Reverse Polish Notation(逆波兰式)
- 逆波兰表达式(Reverse Polish Notation)
- 逆波兰表示法Reverse Polish Notation
- Evaluate Reverse Polish Notation 逆波兰表达式
- Reverse Polish Notation.逆波兰表达式,笔记
- 逆波兰表示法(Reverse Polish Notation)
- 波兰式解析Evaluate Reverse Polish Notation
- leetcode Evaluate Reverse Polish Notation(计算逆波兰表达式)
- LeetCode Reverse Polish Notation求逆波兰表达式值
- Java Evaluate Reverse Polish Notation(逆波兰表达式)
- [Leetcode] Evaluate Reverse Polish Notation 逆波兰表达式
- RMAN的备份与恢复-SPFILE恢复
- 我的第一篇博客
- memcpy
- Cocos2d-X 学习笔记 20 利用CCSpriteBatchNode提高渲染效率
- 正则表达式语法
- leetcode_题解_Evaluate Reverse Polish Notation逆波兰式
- Google调试技巧总结
- 设计易容术!如何设计一张高品位高水准的海报?
- Java核心技术卷I:基础知识(原书第8版):14.3 线程状态
- Android之Animation
- 在IE11下,地图无法加载、视频无法播放、Flash组件好像出问题
- 再次调试STM32F407+DP83848
- Java_反射_Class类(Method,Field,Constructor)
- NFC基本理论