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:
代码语言:javascript复制 ["2", "1", " ", "3", "*"] -> ((2 1) * 3) -> 9
["4", "13", "5", "/", " "] -> (4 (13 / 5)) -> 6
逆波兰表达式,栈的应用
注意减和除的两个数哪个在前,哪个在后
这题的数据不够卡,如果最后结果是int,但是中间也可以溢出啊,写的时候突然想到,懒得改就浪交了,居然过了。
代码语言:javascript复制class Solution {
public:
int toint(string s)
{
int res = 0,i = 0;
if(s[0] == '-') i = 1;
for(; i < s.size(); i )
{
res *=10;
res = s[i]-'0';
}
return s[0] == '-' ? -res : res;
}
int evalRPN(vector<string>& tokens)
{
stack<int> s;
for(int i = 0; i < tokens.size(); i )
{
int a, b;
if(tokens[i] == " ")
a = s.top(), s.pop(), b = s.top(), s.pop(), s.push(a b);
else if(tokens[i] == "-")
a = s.top(), s.pop(), b = s.top(), s.pop(), s.push(b-a);
else if(tokens[i] == "*")
a = s.top(), s.pop(), b = s.top(), s.pop(), s.push(a*b);
else if(tokens[i] == "/")
a = s.top(),s.pop(), b = s.top(), s.pop(), s.push(b/a);
else
s.push(toint(tokens[i]));
}
return s.top();
}
};