class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> st;
for(int i=0;i<tokens.size();i++){
if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {//遍历到符号,弹出栈顶的两个元素进行运算,运算结果压入栈中。
long long num1 = st.top();
st.pop();
long long num2 = st.top();
st.pop();
if (tokens[i] == "+") st.push(num2 + num1);
if (tokens[i] == "-") st.push(num2 - num1);
if (tokens[i] == "*") st.push(num2 * num1);
if (tokens[i] == "/") st.push(num2 / num1);
} else {
st.push(stoll(tokens[i]));
}
}
int result=st.top();//栈中剩余元素为表达式结果
return result;
}
};
逆波兰表达式为后缀表达式,计算机依次从左向右扫描,遍历到符号则弹出栈顶的两个元素,运算结果压入栈中,最后剩下的值为逆波兰表达式结果。
以上内容参考Karl老师的代码随想录,不做为商业用途。