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 };