题目:http://oj.leetcode.com/problems/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
Discuss
class Solution { public: int evalRPN(vector<string> &tokens) { stack<int> stk; double oper_1=0.0, oper_2=0.0; for (vector<string>::iterator iter = tokens.begin(); iter != tokens.end(); ++iter){ if (*iter == "+"){ oper_1 = stk.top(); stk.pop(); oper_2 = stk.top(); stk.pop(); stk.push(oper_2 + oper_1); } else if (*iter == "-") { oper_1 = stk.top(); stk.pop(); oper_2 = stk.top(); stk.pop(); stk.push(oper_2 - oper_1); // 注意这里的先后顺序 } else if (*iter == "*"){ oper_1 = stk.top(); stk.pop(); oper_2 = stk.top(); stk.pop(); stk.push(oper_2 * oper_1); } else if (*iter == "/"){ oper_1 = stk.top(); stk.pop(); oper_2 = stk.top(); stk.pop(); stk.push(oper_2 / oper_1); // 注意这里的先后顺序 } else{ stk.push(atoi(iter->c_str())); } } return stk.top(); } };