[leetcode_150] Evaluate Reverse Polish Notation

逆波兰表达式,用栈即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution {
public:
    int evalRPN(vector<string> &tokens) {
        stack<int> st;
        for(int i = 0; i < tokens.size(); i++) {
            if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
                int num1 = st.top();
                st.pop();
                int num2 = st.top();
                st.pop();
                if(tokens[i] == "+") {
                    st.push(num1 + num2);
                }
                else if(tokens[i] == "-") {
                    st.push(num2 - num1);
                }
                else if(tokens[i] == "*") {
                    st.push(num1 * num2);
                }
                else if(tokens[i] == "/") {
                    st.push(num2 / num1);
                }
            } 
            else {
                st.push(genNum(tokens[i]));
            }
        }
        return st.top();
    }
private:
    int genNum(string s) {
        int flag = 1;
        if(s[0] == '-') {
            flag = -1;
            s = string(s, 1);
        }
        int num = 0;
        for(int i = s.length() - 1; i >= 0; i--) {
            num += (s[i] - '0') * (int)pow(10.0, (int)s.length() - 1 - i);
        }
        return num * flag;
    }
};
Licensed under CC BY-NC-SA 4.0