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
https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/
维护一个栈,当有数字进来就入栈,当遇到符号的时候,就进行相应的运算。运算的时候,弹出两个数字,栈下一层的数字op栈顶的数字,再把结果
入栈。有个小细节,需要把正负数字的字符串转换成整数类型。最后输出时栈中的元素。
class Solution {
public:
stack<int> num;
int evalRPN(vector<string> &tokens) {
int res = 0,tmp = 0;
for(int i=0;i<tokens.size();i++)
{
if(tokens[i]=="+" || tokens[i]=="-" ||tokens[i]=="*" ||tokens[i]=="/")
{
tmp = num.top();
num.pop();
if(tokens[i]=="+")
{
res = tmp + num.top();
num.pop();
num.push(res);
}else if(tokens[i]=="-")
{
res = num.top()-tmp;
num.pop();
num.push(res);
}else if(tokens[i]=="*")
{
res = num.top()*tmp;
num.pop();
num.push(res);
}else
{
res = num.top()/tmp;
num.pop();
num.push(res);
}
}else
{
int len = tokens[i].size();
int pow = 1;
int sum = 0,j;
for(j=len-1;j>=0;j--)
{
if(j==0)
{
if(tokens[i][j]=='+')
{
continue;
}else if(tokens[i][j]=='-')
{
sum = -sum;
continue;
}
}
sum+=pow*(tokens[i][j]-'0');
pow *= 10;
}
num.push(sum);
}
}
return num.top();
}
};