题目来源:力扣
题目描述:
给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。
注意:
有效的算符为 '+'、'-'、'*' 和 '/' 。
每个操作数(运算对象)都可以是一个整数或者另一个表达式。
两个整数之间的除法总是 向零截断 。
表达式中不含除零运算。
输入是一个根据逆波兰表示法表示的算术表达式。
答案及所有中间计算结果可以用 32 位 整数表示。
代码:
int evalRPN(vector<string>& tokens) {
stack<int> st;
for(auto& str : tokens){
if(str == "+" || str == "-" || str == "*" || str == "/"){
int right = st.top();
st.pop();
int left = st.top();
st.pop();
switch(str[0]){
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();
}
思路:
逆波兰表达式也就是后缀表达式,我们平时的2*3+4-5这叫中缀表达式
思路其实很简单,我们使用一个栈,对于数字就入栈,是操作符就出栈两个数字,然后把这两个数运算后的结果再入栈,最终栈里就只剩结果了,我们返回即可