150. Evaluate Reverse Polish Notation

仅供自己学习

 

思路:

这种有计算顺序的题,可以用栈解决,同样是滞后如何处理的问题。遍历token,如果是数字就加入进栈,如果是运算符号,就取出栈顶和栈顶前一个数进行计算,并把这两个数pop掉,然后再把结果加入进栈。

因为token的元素是string,所以用int类型的栈时候,加入数字,得用c_str转为字符,再用atoi转为int在加入进栈即可。

 

代码:

 1 class Solution {
 2 public:
 3     int evalRPN(vector<string>& tokens) {
 4         stack<int> st;
 5         int n=tokens.size();
 6         for(int i=0;i<n;i++){
 7             if(tokens[i]=="+"){
 8                 int sec=st.top(); st.pop();
 9                 int fir=st.top(); st.pop();
10                 st.push(fir+sec);
11             }
12             else if(tokens[i]=="-"){
13                 int sec=st.top(); st.pop();
14                 int fir=st.top(); st.pop();
15                 st.push(fir-sec);
16             }
17             else if(tokens[i]=="*"){
18                 int sec=st.top(); st.pop();
19                 int fir=st.top(); st.pop();
20                 st.push(fir*sec);
21             }
22             else if(tokens[i]=="/"){
23                 int sec=st.top(); st.pop();
24                 int fir=st.top(); st.pop();
25                 st.push(fir/sec);
26             }
27             else st.push(atoi(tokens[i].c_str()));
28         }
29         return st.top();
30 
31     }
32 };

 

posted @ 2021-03-29 16:05  Mrsdwang  阅读(49)  评论(0编辑  收藏  举报