代码随想录第十天 2023.7.22
题目链接:
150. 逆波兰表达式求值 - 力扣(LeetCode)https://leetcode.cn/problems/evaluate-reverse-polish-notation/
代码如下:
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();
st.pop();
return result;
}
};
注意:
st.push()语句中,num2和num1的位置不能颠倒,因为是用栈存储的数据的,从栈里pop出来顺序是反的,减法和除法不满足结合律,所以要区分num2和num1