原题链接:https://leetcode.com/problems/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();
}
};