@geek-sjl
2018-10-31T10:39:13.000000Z
字数 862
阅读 528
将操作数入栈,遇到运算符号时从栈中弹出两个操作数执行相应操作,直到栈空。
坑点是操作数前面可能有负号..不能看第一个字符而把它判为一个运算符号..
#include <stack>class Solution {public:int toint(string tmp){int num=0;bool isNegative=false;for(int i=0;i<tmp.size();i++){if(tmp[i]=='-'){isNegative=true;}else{num*=10;num+=tmp[i]-'0';}}return isNegative?-num:num;}int evalRPN(vector<string>& tokens) {stack<int> tmp;for(int i=0;i<tokens.size();i++){if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){int num1=tmp.top();tmp.pop();int num2=tmp.top();tmp.pop();switch(tokens[i][0]){case '+':{int nowRes=num1+num2;tmp.push(nowRes);break;}case '-':{int nowRes=num2-num1;tmp.push(nowRes);break;}case '*':{int nowRes=num2*num1;tmp.push(nowRes);break;}case '/':{int nowRes=num2/num1;tmp.push(nowRes);break;}}}else{int num=toint(tokens[i]);tmp.push(num);}}return tmp.top();}};