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
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
for(int i = 0; i < tokens.size(); i++){
if(tokens[i].length() == 1 && (tokens[i][0] < '0' || tokens[i][0] > '9')){
int y = s.top();
s.pop();
int x = s.top();
s.pop();
switch(tokens[i][0]){ // 类和结构体不能用switch做分支比较
case '+': s.push(x+y);break;
case '-': s.push(x-y);break;
case '*': s.push(x*y);break;
case '/': s.push(x/y);break; // ["0","3","/"]
}
} else {
int num = 0;
int j = 0;
int flag = 1;
if(tokens[i][0] == '+') {j++;}
else if(tokens[i][0] == '-') {j++;flag = -1;}
for(; j < tokens[i].length(); j++){
num = num*10 + tokens[i][j]-'0';
} s.push(flag*num);
}
} return s.top();
}
};