
变量简洁正确完整思路
4 + 13 / 5,这就是中缀表达式,计算机从左到右去扫描的话,扫到13,还要判断13后面是什么运算法,还要比较一下优先级,然后13还和后面的5做运算,做完运算之后,还要向前回退到 4 的位置,继续做加法
转化为后缀表达式之后:["4", "13", "5", "/", "+"] ,就不一样了,计算机可以利用栈里顺序处理,不需要考虑优先级了。也不用回退了, 所以后缀表达式对计算机来说是非常友好的
栈stk存放数字,遇到+-*/就popnum1num2计算结果push,遇到数字stoi并push,最后剩一个答案
class Solution { public: int evalRPN(vector<string>& tokens) { stack<int>stk; for(int i=0;i<tokens.size();i++){ if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){ int num1=stk.top();stk.pop(); int num2=stk.top();stk.pop(); if(tokens[i]=="+")stk.push(num2+num1); else if(tokens[i]=="-")stk.push(num2-num1); else if(tokens[i]=="*")stk.push(num2*num1); else if(tokens[i]=="/")stk.push(num2/num1); }else{ stk.push(stoi(tokens[i])); } } return stk.top(); } };
踩过的坑
C++不能直接用string作为switch(),这道题只需要把string当做char就可以了
stk.push(num2+num1);
先放进去的num2是左边,后放进去先拿出来的num1是右边
浙公网安备 33010602011771号