解法一:栈
定义一个栈辅助计算,遍历字符串,遇到数字进栈,遇到运算符"+"、"-"、"*"、"/"时,从栈中取出两个数字计算,并将结果重新入栈。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> st; //栈,存放数字
for(int i=0;i<tokens.size();i++){ //如果是运算符,对栈中前两个进行计算
if(tokens[i]=="+" || tokens[i]=="-" || tokens[i]=="*" || tokens[i]=="/"){
int n2=st.top(); //注意区别左右值,先出栈为右值,后出栈为左值
st.pop();
int n1=st.top();
st.pop();
if(tokens[i]=="+") //计算
st.push(n1+n2); //将结果放回栈中
else if(tokens[i]=="-")
st.push(n1-n2);
else if(tokens[i]=="*")
st.push(n1*n2);
else if(tokens[i]=="/")
st.push(n1/n2);
}
else
st.push(stoi(tokens[i])); //如果是数字,字符串转数字入栈
}
return st.top(); //栈中的最后一个元素为计算结果
}
};