文章目录
150. 逆波兰表达式求值
思路–栈解决
class Solution {
public:
//逆波兰表达式运算的思路:
//碰到数字就入栈;
//碰到运算符就出两个数字运算,再把结果入栈
int evalRPN(vector<string>& tokens) {
stack<int> st; //入栈数字的栈
//遍历表达式tokens数组
for(const auto& str:tokens){
if(str == "+" || str == "-" || str == "*" || str == "/") {//是操作符取出栈顶两个数字
int right = st.top(); //右操作数
st.pop();
int left = st.top();//左操作数
st.pop();
//取完之后运算结果放入栈中
switch(str[0]){ //取出每个数组tokens的每个元素的第一个字符
case '+':
st.push(left+right);
break;
case '-':
st.push(left-right);
break;
case '*':
st.push(left*right);
break;
case '/':
st.push(left/right);
break;
}
}
else{//不是操作符就是数字啦
st.push(stoi(str));
}
}
return st.top(); //计算完表达式后的结果在栈顶
}
};