逆波兰表达式求值

逆波兰表达式又称后缀表达式。简单的说就是中缀表达式中的操作符写在两个操作数的后面。 例如:1+2 => 1 2 +

主要思路:遇到操作数就进行入栈操作,遇到操作符就进行出栈操作(依次弹出栈中的两个元素),将弹出元素进行计算,计算的结果重新入栈,最后栈中的数据就是答案。

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param tokens string字符串vector
     * @return int整型
     */
    int evalRPN(vector<string>& tokens) {
        stack<int> sk;
        for (vector<string>::iterator it = tokens.begin(); it != tokens.end(); it++) {
            if (isOps(*it)) {
                int val1 = sk.top();
                sk.pop();
                int val2 = sk.top();
                sk.pop();
                int value = calculate(val2, val1, *it);
                sk.push(value);
            } else {
                sk.push(stoi(*it));
            }
        }
        return sk.top(); 
    }

    bool isOps(string str) {
        if (str == "+" || str == "-" || str == "*" || str == "/") {
            return 1;
        } else {
            return 0;
        }
    }
    
    int calculate(int v1,int v2,string ops){
        int res=0;
        if(ops=="+"){
            res=v1+v2;
        }else if(ops=="-"){
            res=v1-v2;
        }else if(ops=="*"){
            res=v1*v2;
        }else if(ops=="/"){
            res=v1/v2;
        }
        return res;
    }
};