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
Subscribe to see which companies asked this question
分析:
实现逆波兰式。
用栈就可以,注意数字可能是负数。
代码:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> num;
stack<char> t;
for(int i=0;i<tokens.size();++i)
{
if(("+"==tokens[i])||("-"==tokens[i])||("*"==tokens[i])||("/"==tokens[i]))
{
int t2=num.top();num.pop();
int t1=num.top();num.pop();
if("+"==tokens[i]) num.push(t1+t2);
else if("-"==tokens[i]) num.push(t1-t2);
else if("*"==tokens[i]) num.push(t1*t2);
else if("/"==tokens[i]) num.push(t1/t2);
}
else
{
int temp=0;
string s=tokens[i];
for(int j=0;j<s.size();++j)
{
if(('0'<=s[j] && s[j]<='9'))
temp=temp*10+(s[j]-'0');
}
if(s[0]=='-') temp=temp*(-1);
// temp=(s[0]=='-')?(-1*temp)::temp;
num.push(temp);
}
}
return num.top();
}
};