首页 » 编程之美 » 正文

[leetcode_150]Evaluate Reverse Polish Notation

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

class Solution {
public:
    int evalRPN(vector<string> &tokens) {
        stack<int>st;
        for(int i = 0;i < tokens.size();i++) {
            if(tokens[i] == &quot;+&quot; || tokens[i] == &quot;-&quot;|| tokens[i] == &quot;<em>&quot; || tokens[i] == &quot;/&quot;) {
                int num1 = st.top();
                st.pop();
                int num2 = st.top();
                st.pop();
                if(tokens[i] == &quot;+&quot;) {
                    st.push(num1+num2);
                }
                else if(tokens[i] == &quot;-&quot;) {
                    st.push(num2-num1);
                }
                else if(tokens[i] == &quot;</em>&quot;) {
                    st.push(num1<em>num2);
                }
                else if(tokens[i] == &quot;/&quot;) {
                    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 &gt;= 0;i--) {
            num += (s[i] - '0')</em>(int)pow(10.0,(int)s.length()-1-i);
        }
        return num*flag;
    }
};

发表评论