逆波兰表达式求值
逆波兰表达式严格遵循「从左到右」的运算。计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式。
逆波兰表达式求值的过程是:
- 如果遇到操作数,则将操作数入栈;
- 如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。
整个逆波兰表达式遍历完毕之后,栈内只有一个元素,该元素即为逆波兰表达式的值。
// 逆波兰表达式求值,不带括号
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;
}
};