本文参考代码随想录
根据 逆波兰表示法,求表达式的值。
有效的运算符包括 + , - , * , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
利用栈来解决,当检索到运算符时弹出栈顶两个元素进行运算,将结果入栈
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]));//stoll:将字符串转化为长整型
}
}
int result = st.top();
return result;
}
};
时间复杂度、空间复杂度:O(n)