LeetCode刷题记录.Day27

逆波兰表达式求值

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;
}
};

和昨天的题目思想一样,通过一个循环进行出入栈操作,来实现递归操作表达式的目的。

posted @ 2022-11-27 22:27  凱風快晴  阅读(22)  评论(0)    收藏  举报