leetcode-Evaluate Reverse Polish Notation

Question:

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

Solution:

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        int len = tokens.size();
        int stack[5000];
        int top = -1;
        int t1 = 0;
        int t2 = 0;
        for(int i = 0 ; i < len ; i++){
            if(top >= 1){
                t1 = stack[top];
                t2 = stack[top-1];
            }
            switch(tokens[i][0]){
                case '+':stack[--top]  = t1+t2;break;
                case '*':stack[--top]  = t2*t1;break;
                case '/':stack[--top]  = t2/t1;break;
                case '-':if(tokens[i].size()==1){
                   stack[--top]  = t2-t1; break;
                }
                 default: stack[++top] = atoi(tokens[i].c_str());
                 //stringstream ss;
                //         ss<<tokens[i];
                //         ss>>stack[++top];

            }
        }
        return stack[0];
    }
};

總結:
1、後綴表達式求值,典型的棧應用。相應的還有中綴表達式轉換後綴表達式
:使用兩個棧,一個存儲運算符號,一個存儲數字,運算符棧一直要保證棧頂運算符號優先級最大。

2、stringstream最是耗時beat 8%,16ms
改用atoi beat 72%,9ms。效率相差一倍

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章