优于网上博客(异常情况考虑更全面):150. Evaluate Reverse Polish Notation


做题目就是要复杂问题简单化,简单问题全面化,这道题目并不难,所以写了一个专门的cal函数,使得代码更简洁的同时能处理更多异常情况,例如异常输入导致的空栈,除0-等。
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        int n = tokens.size();
        if (n <= 0){
            return ans;
        }
        
        while (!st.empty()){
            st.pop();
        }
        
        for (int i = 0; i < n; ++i){
            if (tokens[i] == "+"){
                cal('+');
            }else if (tokens[i] == "-"){
                cal('-');
            }else if (tokens[i] == "/"){
                cal('/');
            }else if (tokens[i] == "*"){
                cal('*');
            }else{
                st.push(atoi(tokens[i].c_str()));
            }
        }
        
        return st.top();
    }
    
    int cal(char c){
        int a = INT_MIN, b = INT_MIN;
        if (!st.empty()){
            a = st.top();
            st.pop();
        }
        if (!st.empty()){
            b = st.top();
            st.pop();
        }    
        
        if (c == '+'){
            st.push(a + b);
        }else if(c == '-'){
            st.push(b - a);
        }else if (c == '/'){
            if (a == 0){
                return INT_MAX;
            }
            st.push(b / a);
        }else if ( c == '*' ){
            st.push(a * b);
        }
        return 0;
    }
private:
    int ans = 0;
    stack<int> st;
};
已邀请:

要回复问题请先登录注册