【Stack】Evaluate Reverse Polish Notation

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are +-*/. Each operand may be an integer or another expression.

Some examples:

  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

思路

计算逆波兰式的结果,遍历表达式,碰到操作数入栈,碰到操作符就从栈顶取出两个操作数,再将计算后的结果入栈,最后栈中剩余的唯一操作数就是计算结果。

代码

int evalRPN(vector<string> &tokens) {
    stack<int> tkStack; //比stack<string>要好
    set<string> opSet({"+", "-", "*", "/"});
    for (string t : tokens) {
        if(opSet.find(t) == opSet.end()) {//set的查找接口很原始,其实也很浪费
            tkStack.push(stoi(t)); //stoi("4")和to_string(4)太好用了
        } else {
            int a = tkStack.top();
            tkStack.pop();
            if(t == "+")
                a = tkStack.top() + a;
            else if(t == "-")
                a = tkStack.top() - a;
            else if(t == "*")
                a = tkStack.top() * a;
            else if(t == "/")
                a = tkStack.top() / a;
            tkStack.pop();
            tkStack.push(a);
        }
    }
    return tkStack.top();
}

posted on 2014-08-22 00:24  小唯THU  阅读(194)  评论(0)    收藏  举报

导航