逆波兰表达式求值
逆波兰表达式严格遵循「从左到右」的运算。计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式。
逆波兰表达式求值的过程是:
- 如果遇到操作数,则将操作数入栈;
- 如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。
整个逆波兰表达式遍历完毕之后,栈内只有一个元素,该元素即为逆波兰表达式的值。
// 逆波兰表达式求值,不带括号class Solution {public:int evalRPN(vector<string>& tokens){stack<int> st;for (auto& token : tokens) {if (isNumber(token)) {st.push(stoi(token));} else {int num2 = st.top();st.pop();int num1 = st.top();st.pop();switch (token[0]) {case '+':st.push(num1 + num2);break;case '-':st.push(num1 - num2);break;case '*':st.push(num1 * num2);break;case '/':st.push(num1 / num2);break;}}}return st.top();}bool isNumber(string& token){if (token == "+" || token == "-" || token == "*" || token == "/") {return false;}return true;}};
