这道题是栈的典型代表,典型的思想就是逆波兰表达式的规则——数字在前,符号处理最近的数字,加上括号,这个过程完全可以利用栈来完成,栈的思想恰好是数字入栈,符号处理完成之后让这个结果接着入栈,之后还会对他进行计算,所以给出了以下代码:
class Solution {
public:
stack<int> mStack;
int temp;
int evalRPN(vector<string>& tokens) {
for(int i=0;i<tokens.size();i++){
if(tokens[i]!="/"&&tokens[i]!="*"&&tokens[i]!="+"&&tokens[i]!="-"){
mStack.push(std::stoi(tokens[i]));
}
else if(tokens[i]=="/"){
int p=mStack.top();
mStack.pop();
int q=mStack.top();
mStack.pop();
temp=q/p;
mStack.push(temp);
}
else if(tokens[i]=="+"){
int p=mStack.top();
mStack.pop();
int q=mStack.top();
mStack.pop();
temp=p+q;
mStack.push(temp);
}
else if(tokens[i]=="-"){
int p=mStack.top();
mStack.pop();
int q=mStack.top();
mStack.pop();
temp=q-p;
mStack.push(temp);
}
else if(tokens[i]=="*"){
int p=mStack.top();
mStack.pop();
int q=mStack.top();
mStack.pop();
temp=p*q;
mStack.push(temp);
}
}
return mStack.top();
}
};