题目描述
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
解题思路
后缀表达式求值:
定义一个int类型的栈,遍历string数组,如果是字符串是数字就转换为数字类型压入栈中,如果是+,-,*,/就从栈中弹出两个数字进行相应运算,然后将运算结果压入栈中。如果遇到运算符时栈中数字小于2,就出错,直接返回0。
class Solution {
public:
int evalRPN(vector<string> &tokens) {
stack<int> st;
for(auto x:tokens)//auto:用来声明自动变量。
{
if(x=="+"||x=="-"||x=="*"||x=="/")
{
if(st.size()<2)
return 0;
int a,b,c=0;
a=st.top();
st.pop();
b=st.top();
st.pop();
if(x=="+")
c=a+b;
if(x=="-")
c=b-a;
if(x=="*")
{
c=a*b;
}
if(x=="/")
{
c=b/a;
}
st.push(c);
}
else{
st.push(atoi(x.c_str()));//字符串转换为整数
}
}
return st.top();
}
};