思路:
遍历string,如果遇到数字就转化成整数然后压栈,如果遇到符号就出栈两次进行运算,把运算结果压栈,最后栈里只剩下一个元素就是答案。
注意:
我在做的时候写了一个fun去转化数字字符串和整数,还忘记了负数的存在,可以使用stoi函数一步完成。
代码:
class Solution {
public:
int fun(string s){
int flag=0;if(s[0]=='-')flag=1;
int n=s.size();int num=0;
for(int i=0+flag;i<n;i++){
num*=10;
num+=s[i]-'0';
}
if(flag)return -1*num;
return num;
}
int evalRPN(vector<string>& tokens) {
stack<int>mystack;int sum=0;
for(int i=0;i<tokens.size();i++){
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
int num2=mystack.top();
mystack.pop();
int num1=mystack.top();
mystack.pop();
if(tokens[i]=="+"){
sum=num1+num2;
mystack.push(sum);
}else if(tokens[i]=="-"){
sum=num1-num2;
mystack.push(sum);
}else if(tokens[i]=="*"){
sum=num1*num2;
mystack.push(sum);
}else if(tokens[i]=="/"){
sum=num1/num2;
mystack.push(sum);
}
}else{
mystack.push(fun(tokens[i]));
}
}
return mystack.top();
}
};