leetcode Evaluate Reverse Polish Notation
题目连接
https://leetcode.com/problems/evaluate-reverse-polish-notation/
Evaluate Reverse Polish Notation
Description
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
class Solution { public: inline bool is_digit(char ch) { return ch >= '0' && ch <= '9'; } int evalRPN(vector<string>& tokens) { stack<int> A; int a, b; size_t n = tokens.size(); for (size_t i = 0; i < n; i++) { int v = 0; if (is_digit(tokens[i][0]) || tokens[i].length() > 1) { bool f = tokens[i][0] == '-'; size_t j, k = tokens[i].size(); for (j = f ? 1 : 0; j < k; j++) v = v * 10 + tokens[i][j] - '0'; A.push(f ? -v : v); } else { char &ch = tokens[i][0]; a = A.top(); A.pop(); b = A.top(); A.pop(); switch (ch) { case '+': A.push(a + b); break; case '-': A.push(b - a); break; case '*': A.push(a * b); break; case '/': A.push(b / a); break; } } } return A.top(); } };
By: GadyPu 博客地址:http://www.cnblogs.com/GadyPu/ 转载请说明