class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int>nums;
queue<char>op;
int size=tokens.size();
int i=0;
while(i<size){
if(tokens[i].size()>1){
int temp;
stringstream ss;
ss << tokens[i];
ss>>temp;
nums.push(temp);
}
else if(tokens[i].size()==1&&tokens[i][0]>='0'&&tokens[i][0]<='9'){
int temp;
temp=tokens[i][0]-'0';
nums.push(temp);
}
else{
int l=nums.top();
nums.pop();
int r=nums.top();
nums.pop();
if(tokens[i][0]=='*')l=l*r;
else if(tokens[i][0]=='/')l=r/l;
else if(tokens[i][0]=='+')l=l+r;
else l=r-l;
nums.push(l);
}
i++;
}
if(nums.empty())return 0;
return nums.top();
}
};
遇到数字压栈,遇到运算符出栈两数,与该运算符计算后结果入栈
最后栈中剩下的那个元素就是结果
tips
字符串转数字用stringstream
出栈两元素与原顺序相反,注意出发和减法时的顺序(开始写错了调了半天才发现–_--)