题目描述:
根据 逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
思路:
如果是数字则放到栈中;
如果是运算符则取出栈顶的两个元素进行运算,再把结果放到栈中;
最后返回栈顶元素
代码如下:
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int>nums;
for(auto str:tokens){
if(str=="+"||str=="-"||str=="*"||str=="/"){
int res=0;
int n1=nums.top();
nums.pop();
int n2=nums.top();
nums.pop();
if(str=="+"){
res=n1+n2;
}
else if(str=="-"){
res=n2-n1;
}
else if(str=="*"){
res=n1*n2;
}
else{
res=n2/n1;
}
nums.push(res);
}
else nums.push(stoi(str));
}
return nums.top();
}
};