题目大意:给定一个逆波兰表达式,求该表达式的值。
如:给定表达式:: [“4”, “13”, “5”, “/”, “+”],
求值结果为:13/5=2,4+2=6,返回值为6。
思路:定义一个栈,每次出现数,则push放进栈中,若出现运算符的话,就将栈顶的两个元素出栈进行运算后,将结果push放入栈,最后返回栈顶元素。
代码
class Solution {
public:
int evalRPN(vector<string>& tokens)
{
int len=tokens.size();
if(len<1) return 0;
stack<int> stk;
for(int i=0;i<len;i++)
{
if(tokens[i]!="+" && tokens[i]!="-"
&& tokens[i]!="*" && tokens[i]!="/")
{
stk.push(atoi(tokens[i].c_str()));
}
else
{
int a=stk.top();
stk.pop();
int b=stk.top();
stk.pop();
if(tokens[i]=="+")
stk.push(b+a);
else if(tokens[i]=="-")
stk.push(b-a);
else if(tokens[i]=="*")
stk.push(b*a);
else
{
if(a!=0)
stk.push(b/a);
else return 0;
}
}
}
return stk.top();
}
};