力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

首先我们需要知道什么是逆波兰表达式,像我们平常遇到的都是中缀表达式,然而逆波兰确实后缀表达式,因此这个题目隐含的意思就是将一个后缀表达式转换为中缀表达式,并计算它的值。
本题使用栈来进行存储遍历到的数据,当我们遍历到数字的时候将该数字入栈,如果遍历到运算符就出栈两个数进行运算符的操作,然后将结果入栈。最终剩下的栈顶元素就是我们需要的答案。
- class Solution
- {
- public:
- int evalRPN(vector
& 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();
- }
- };