解题思路: ( 理解逆波兰表达式的规则 )
逆波兰表达式严格遵循「从左到右」的运算。计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式,进行如下操作:
如果遇到操作数,则将操作数入栈;
如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。
整个逆波兰表达式遍历完毕之后,栈内只有一个元素,该元素即为逆波兰表达式的值。
class Solution {
public:
int evalRPN(vector<string>& tokens)
{
stack<int> st;
for(auto& str: tokens)
{
if(str=="+" || str=="-" || str=="*" || str=="/")
{
int right=st.top();
st.pop();
int left=st.top();
st.pop();
switch(str[0])//str 不通过 不能用自定义类型只能用内置类型
{
case '+':
st.push(left+right);
break;
case '-':
st.push(left-right);
break;
case '*':
st.push(left*right);
break;
case '/':
st.push(left/right);
break;
}
}
else
{
st.push(stoi(str)); // 利用函数转成int
}
}
return st.top();
}
};