Evaluate Reverse Polish Notation
LeetCode #150
Description:
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +, -, *, /. Each operand may be an integer or another expression.
Example:
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
Idea:
用stack,计算一次算一个结果,重新放入stack。每个operator都需要两个数。自己写bool isOperator(string s)
来判断是不是operator。
Code:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> nums;
for(const auto & token : tokens){
if(!isOperator(token)){
nums.push(atoi(token.c_str()));
}
else{
int right=nums.top();
nums.pop();
int left=nums.top();
nums.pop();
if(token[0]=='+'){
nums.push(left+right);
}
else if(token[0]=='-'){
nums.push(left-right);
}
else if(token[0]=='*'){
nums.push(left*right);
}
else if(token[0]=='/'){
nums.push(left/right);
}
}
}
return nums.top();
}
bool isOperator(string s){
if(s.size()==1 && string("+-*/").find(s)!=string::npos)
return true;
else
return false;
}
};