LeetCode-Evaluate Reverse Polish Notation-逆波兰式-栈的应用
https://oj.leetcode.com/problems/evaluate-reverse-polish-notation/
当年上课的例子。就是栈的应用,每次遇到操作符就把栈的头两个元素与操作符进行计算,再将结果压栈,如果逆波兰式没有问题,那么最后栈里应该只剩一个元素。
需要注意的有两个地方:
1)string 转 int,用了stringstream ,str(x)当做输入,输出同fin的用法:ss>>res
2)每次栈顶的两个元素,需要注意的是下面的是左边操作数,最上面的是右边操作数。
class Solution { public: int n,m; int GetNum(string &s){ stringstream ss; ss.str(s); int res; ss>>res; return res; } int Op(int a,int b,char op){ switch(op){ case '+': return a+b; case '-': return a-b; case '*': return a*b; case '/': return a/b; } return -1; } bool isOp(string &s){ return s=="+" || s=="-" || s=="*" || s=="/"; } int evalRPN(vector<string> &tokens) { n=tokens.size(); vector <string> &t=tokens; if (n==0){return 0;} stack <int> st; for (int i=0;i<n;i++){ string cur=t[i]; if (isOp(cur)){ int b=st.top(); st.pop(); int a=st.top(); st.pop(); a=Op(a,b,cur[0]); st.push(a); } else{ st.push(GetNum(cur)); } } return st.top(); } };