leetcode[150] Evaluate Reverse Polish Notation

逆波兰表示法,在维基百科here

一不小心就看到了维基上有说用栈处理。然后就用栈处理了。

需要注意的是,操作数前后不要弄错,stoi可以调用。它应该是在stdlib.h的头文件里,不过我在codeblock上试了不行。

class Solution {

public:

    int evalRPN(vector<string> &tokens) 

    {

        int size  = tokens.size();

        if (size == 0) return 0;

        stack<int> sta;

        for (int i = 0; i < size; i++)

        {

            if (isdigit(tokens[i][0]) || tokens[i].size() > 1)

                sta.push(stoi(tokens[i]));

            else

            {

                int op1 = sta.top();

                sta.pop();

                int op2 = sta.top();

                sta.pop();

                switch(tokens[i][0])

                {

                    case '+':

                        sta.push(op1 + op2); break;

                    case '-':

                        sta.push(op2 - op1); break;

                    case '*':

                        sta.push(op1 * op2); break;

                    case '/':

                        sta.push(op2 / op1); break;

                }

            }

        }

        return sta.top();

    }

};

如果自己实现stoi的话:

    int stoi150(string s)

    {

        int flag = 1;

        if (s[0] == '-')

        {

            flag = -1;

            s = s.substr(1);

        }

        else if (s[0] == '+')

        {

            s = s.substr(1);

        }



        int size = s.size(), ans = 0;

        for (int i = 0; i < size; i++)

        {

            ans = 10 * ans + (s[i] - '0');

        }

        return flag * ans;

    }
View Code

 

你可能感兴趣的:(LeetCode)