这道题很好的理解计算机的思考方式。
在进行算术运算时,["2","1","+","3","*"],这种后缀表达式对于计算机的思考是非常友好的。
如果使用人类常用的中缀表达式:(2+1)x3,计算机需要对符号进行优先级判断,对于计算机来说是有点麻烦的。所以计算机利用栈的特性,这种后缀表达式对计算机的开销也小很多。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long>st;
for(int i=0;i<tokens.size();i++){
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
long long num1=st.top();
st.pop();
long long num2=st.top();
st.pop();
if(tokens[i]=="+") st.push(num1+num2);
if(tokens[i]=="-") st.push(num2-num1);
if(tokens[i]=="*") st.push(num2*num1);
if(tokens[i]=="/") st.push(num2/num1);
}else{
st.push(stoll(tokens[i]));
}
}
int result=st.top();
return result;
}
};