class Solution {
public:
int evalRPN(vector<string>& tokens)
{
stack<int> s;
for(int i = 0; i < tokens.size();i++)
{
if(tokens[i] == "+")
{
int a = s.top();
s.pop();
int b = s.top();
s.pop();
int sum = a + b;
s.push(sum);
}
else if(tokens[i] == "-")
{
int a = s.top();
s.pop();
int b = s.top();
s.pop();
int sum = b - a;
s.push(sum);
}
else if(tokens[i] == "*")
{
int a = s.top();
s.pop();
int b = s.top();
s.pop();
int sum = a * b;
s.push(sum);
}
else if(tokens[i] == "/")
{
int a = s.top();
s.pop();
int b = s.top();
s.pop();
int sum = b / a;
s.push(sum);
}
else
{
s.push(atoi(tokens[i].c_str()));
}
}
return s.top();
}
};
算法思路:
和中缀表达式思想相似,没有检测到+-*/运算符的时候就可以直接先将string类型转换为int类型,然后压入栈中,
当检测到的时候利用两个常数分别取栈顶元素,取一次就出栈一次,然后将计算之后的值压入栈中
最后剩下的栈顶元素就是所要求的结果。