问题描述:
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
Show Tags
Show Similar Problems
分析:这道题比较普通,倒是c++的语法折磨了我好长,c++里面不能用switch来比较string,也就是switch(string)是错误的。于是我想到strcmp,但是也是错误的,后来改成==就可以了
代码如下:16ms
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> stack;
int size = tokens.size();
for(int i = 0;i<size;i++){
string str = tokens[i];
int first;
int second;
if(str=="+"){
second = stack.top();stack.pop();
first = stack.top();stack.pop();
stack.push(second+first);
}else if(str=="-"){
second = stack.top();stack.pop();
first = stack.top();stack.pop();
stack.push(first-second);
}else if(str=="*"){
second = stack.top();stack.pop();
first = stack.top();stack.pop();
stack.push(first*second);
}else if(str=="/"){
second = stack.top();stack.pop();
first = stack.top();stack.pop();
stack.push(first/second);
}else{
//为整数,解析并压栈
int val = atoi(str.c_str());
stack.push(val);
}
}
return stack.top();
}
};