標籤:style blog color 使用 io for ar div
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
思路:根據逆波蘭標記法的特點,可以使用棧來求解本題,依次遍曆輸入tokens的每一個元素,
若當前元素為數字,則將其入棧;否則,當前元素表示運算操作,彈出棧頂元素和次棧頂元素,即可獲得該運算的左右運算元,將運算結果入棧;重複上述操作。
返回棧頂元素。
1 int evalRPN( vector<string> &tokens ) { 2 if( tokens.empty() ) { return 0; } 3 stack<int> numStack; 4 for( size_t i = 0; i != tokens.size(); ++i ) { 5 if( tokens[i] == "+" ) { 6 int tmp = numStack.top(); numStack.pop(); 7 numStack.top() += tmp; 8 } else if( tokens[i] == "-" ) { 9 int tmp = numStack.top(); numStack.pop();10 numStack.top() -= tmp;11 } else if( tokens[i] == "*" ) {12 int tmp = numStack.top(); numStack.pop();13 numStack.top() *= tmp;14 } else if( tokens[i] == "/" ) {15 int tmp = numStack.top(); numStack.pop();16 assert( tmp != 0 );17 numStack.top() /= tmp;18 } else {19 numStack.push( atoi( tokens[i].c_str() ) );20 }21 }22 return numStack.top();23 }