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