1、栈
我们可以通过栈实现逆波兰表达式求值。对于我们读入的字符串中的每一个数字,我们将其直接入栈;当我们读到运算符号时,则将栈顶的两个元素出栈并进行相应运算,而后将运算结果再次入栈。
class Solution {
public:
bool isNum(string s) {
return !(s == "+" || s == "-" || s == "*" || s == "/");
}
int evalRPN(vector<string> &tokens) {
stack<int> st;
for (string s: tokens) {
if (isNum(s)) {
st.push( stoi(s));
} else if (st.size() > 1) {
int temp;
int op2 = st.top();
st.pop();
int op1 = st.top();
st.pop();
if (s == "+") {
temp = op1 + op2;
} else if (s == "-") {
temp = op1 - op2;
} else if (s == "*") {
temp = op1 * op2;
} else if (s == "/") {
temp = op1 / op2;
}
st.push(temp);
}
}
return st.top();
}
};