题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目解析
首先我们需要知道什么是逆波兰表达式,像我们平常遇到的都是中缀表达式,然而逆波兰确实后缀表达式,因此这个题目隐含的意思就是将一个后缀表达式转换为中缀表达式,并计算它的值。
本题使用栈来进行存储遍历到的数据,当我们遍历到数字的时候将该数字入栈,如果遍历到运算符就出栈两个数进行运算符的操作,然后将结果入栈。最终剩下的栈顶元素就是我们需要的答案。
代码
class Solution
{
public:
int evalRPN(vector<string>& tokens)
{
// stoi
// "+" "-" "*" "/"
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])
{
case '+':
{
int ret=left+right;
st.push(ret);
break;
}
case '-':
{
int ret=left-right;
st.push(ret);
break;
}
case '*':
{
int ret=left*right;
st.push(ret);
break;
}
case '/':
{
int ret=left/right;
st.push(ret);
}
default:
{}
}
}
else
{
int target=stoi(str);
st.push(target);
}
}
return st.top();
}
};