@geek-sjl
2018-10-31T10:39:13.000000Z
字数 862
阅读 438
将操作数入栈,遇到运算符号时从栈中弹出两个操作数执行相应操作,直到栈空。
坑点是操作数前面可能有负号..不能看第一个字符而把它判为一个运算符号..
#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();
}
};