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

分析:这一题就是中缀算术表达式求值运算。最经典的方法就是利用栈来解决这个问题。我们使用一个“辅助栈”来保存遍历到的操作数,当遇到操作符的时候,就从栈中pop出两个元素,进行计算,然后将结果push至“辅助栈”中,然后继续遍历。同时注意边界条件的判断,当这个表达式只有一个时输出是什么,当除法的被除数为0时,是怎么样的情况,都需要进行判断,然而这道题编译的时候没有考虑被除数为0的情况,但是面试的时候一定要注意边界条件的判断,这是面试官考察你考虑问题完不完全。
class Solution {

public:

    int evalRPN(vector<string> &tokens) {

        if(tokens.size()==1)

        {

            vector<string>::iterator iter=tokens.begin();

            return atoi(iter->c_str());

        }

        stack<int> numbers;

        vector<string>::iterator iter=tokens.begin();

        int num1=0,num2=0;

        for(;iter!=tokens.end();++iter)

        {

            if(*iter=="+"||*iter=="-"||*iter=="/"||*iter=="*")

            {

                num1=numbers.top();

                numbers.pop();

                num2=numbers.top();

                numbers.pop();

                if(*iter=="+")

                    numbers.push(num2+num1);

                else if(*iter=="-")

                    numbers.push(num2-num1);

                else if(*iter=="*")

                    numbers.push(num2*num1);

                else if(*iter=="/")

                {

                    numbers.push(num2/num1);

                }

            }

            else

                numbers.push(atoi(iter->c_str()));

        }

        return numbers.top();

    }

};
 Python语言实现,道理都是一样的:
class Solution:

    # @param tokens, a list of string

    # @return an integer

    def evalRPN(self, tokens):

        numbers=[]

        for number in tokens:

            if number not in ["+","-","*","/"]:

                numbers.append(int(number))

            elif number in ["+","-","*","/"]:

                num1=numbers.pop()

                num2=numbers.pop()

                if number=="+":

                    numbers.append(num1+num2)

                elif number=="-":

                    numbers.append(num2-num1)

                elif number=="*":

                    numbers.append(num2*num1)

                elif number=="/":

                    numbers.append(int(num2/float(num1)))

        return int(numbers.pop())

                

 

 

你可能感兴趣的:(eval)