leetcode.150逆波兰表达式求值
根据所给的逆波兰表达式,求出表达式的值。
示例 1:
输入: ["2", "1", "+", "3", "*"] 输出: 9 解释: ((2 + 1) * 3) = 9
示例 2:
输入: ["4", "13", "5", "/", "+"] 输出: 6 解释: (4 + (13 / 5)) = 6
我们用栈来计算整个表达式的值。下面我来画一下整体过程(以示例1为例)。
1.判断是否为数字,是数字就入栈。(本题先将1,2入栈)
2.当取到的是操作符的时候,我们将栈顶的两个元素依次拿出来,保存为num1,num2,利用操作符进行计算
num1=2,num2=1,结果sum=num2+num1(注意num1和num2的顺序,下面的num2是先进去的,所以才将num2放在钱前面)
3.将计算的结果放入栈中(1+2=3放入)。
4.遇到数字3,入栈。
5.计算3*3,将结果入栈
6.返回栈顶元素。即为所求表达式的值
AC代码:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
for(int i=0;i<tokens.size();i++)
{
if(tokens[i]!="+"&&tokens[i]!="-"&&tokens[i]!="*"&&tokens[i]!="/")
{
s.push(stoi(tokens[i]));
}
else
{
int num1 = s.top();
s.pop();
int num2 = s.top();
s.pop();
if(tokens[i]=="+")
s.push(num2+num1);
else if(tokens[i]=="-")
s.push(num2-num1);
else if(tokens[i]=="*")
s.push(num2*num1);
else if(tokens[i]=="/")
s.push(num2/num1);
}
}
return s.top();
}
};