根据 逆波兰表示法,求表达式的值,有效的运算符包括 + , - , * , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
逆波兰表达式是一种后缀表达式,运算符写在后面。
解题思路:按照顺序遍历数组,当数组中元素为数字字符串时,将字符串转化为整型后入栈;当数组中元素为运算符时,弹出栈顶两个元素进行运算,并将结果入栈,最终结果为栈内唯一一个元素,进行返回。
实现代码如下:
//逆波兰表达式求值
int evalRPN(vector<string>& tokens) {
stack<int> st;
for(int i = 0; i<tokens.size(); i++) {
if (tokens[i] == "+") {
int n1 = st.top();
st.pop();
int n2 = st.top();
st.pop();
st.push(n2+n1);
}
else if (tokens[i] == "-") {
int n1 = st.top();
st.pop();
int n2 = st.top();
st.pop();
st.push(n2-n1);
}
else if (tokens[i] == "*") {
int n1 = st.top();
st.pop();
int n2 = st.top();
st.pop();
st.push(n2*n1);
}
else if (tokens[i] == "/") {
int n1 = st.top();
st.pop();
int n2 = st.top();
st.pop();
st.push(n2/n1);
}
else {
int n = stoi(s[i]);
st.push(n);
}
}
return st.top();
}