Middle-题目102:150. 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.
题目大意:
计算逆波兰式的值。
题目分析:
在《数据结构》课的堆栈部分,我们学习过如果求逆波兰式的值,在此复习一下:
初始化一个堆栈,然后遍历逆波兰式数组,如果是操作数则入栈,如果是操作符则把两个操作数弹出来进行运算,运算结果压入堆栈,最终栈中只有一个元素,即表达式的值。
源码:(language:java)

public class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<Integer>();
        for(String token : tokens) {
            if(token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/")) {
                int num1 = stack.pop();
                int num2 = stack.pop();
                stack.push(operate(num2,token,num1));
            }
            else
                stack.push(Integer.parseInt(token));
        }
        return stack.peek();
    }
    private int operate(int a, String op, int b) {
        if(op.equals("+"))
            return a+b;
        else if(op.equals("-"))
            return a-b;
        else if(op.equals("*"))
            return a*b;
        else {
            return a/b;
        }
    }

}

成绩:
17ms,beats 39.27%,众数16ms,17.94%
cmershen的碎碎念:
逆波兰式是一种没有括号的,但运算结果唯一的表达式,对计算机来说要比中缀表达式容易理解很多。关于中缀表达式转逆波兰式的算法见百度百科,之前我们的课程设计也做过这个。

你可能感兴趣的:(Middle-题目102:150. Evaluate Reverse Polish Notation)