150. Evaluate Reverse Polish Notation

一、题目

  1、审题

 

  2、分析

    给出逆波兰表达式(即运算数写前面,操作符写后边),求出运算的正确结果。

 

二、解答

  1、思路:

      采用一个 Stack 存储操作数,当碰到运算符时,出栈栈顶的两个元素进行运算即可。最终遍历完数组后, Stack 中存在的唯一一个数即为结果。

    public int evalRPN(String[] tokens) {
        int len = tokens.length;
        if(len == 0)
            return 0;
        
        Set<String> operSet = new HashSet<>(Arrays.asList("+", "-", "*", "/"));
        
        Stack<Integer> stack = new Stack<>();
        int result = 0;
        for (int i = 0; i < len; i++) {
            
            if(operSet.contains(tokens[i])) {
                int num1 = stack.pop();
                int num2 = stack.pop();
                if(tokens[i].equals("+"))
                    result = num2 + num1;
                else if(tokens[i].equals("-"))
                    result = num2 - num1;
                else if(tokens[i].equals("*"))
                    result = num2 * num1;
                else
                    result = num2 / num1;
                stack.add(result);
            }
            else {
                stack.add(Integer.valueOf(tokens[i]));
            }
        }
        return stack.pop();
    }

 

posted @ 2018-10-12 21:00  skillking2  阅读(139)  评论(0编辑  收藏  举报