【Stack】Evaluate Reverse Polish Notation
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
思路
计算逆波兰式的结果,遍历表达式,碰到操作数入栈,碰到操作符就从栈顶取出两个操作数,再将计算后的结果入栈,最后栈中剩余的唯一操作数就是计算结果。
代码
int evalRPN(vector<string> &tokens) {
stack<int> tkStack; //比stack<string>要好
set<string> opSet({"+", "-", "*", "/"});
for (string t : tokens) {
if(opSet.find(t) == opSet.end()) {//set的查找接口很原始,其实也很浪费
tkStack.push(stoi(t)); //stoi("4")和to_string(4)太好用了
} else {
int a = tkStack.top();
tkStack.pop();
if(t == "+")
a = tkStack.top() + a;
else if(t == "-")
a = tkStack.top() - a;
else if(t == "*")
a = tkStack.top() * a;
else if(t == "/")
a = tkStack.top() / a;
tkStack.pop();
tkStack.push(a);
}
}
return tkStack.top();
}
浙公网安备 33010602011771号