关闭

Middle-题目102:150. Evaluate Reverse Polish Notation

44人阅读 评论(0) 收藏 举报
分类:

题目原文:
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的碎碎念:
逆波兰式是一种没有括号的,但运算结果唯一的表达式,对计算机来说要比中缀表达式容易理解很多。关于中缀表达式转逆波兰式的算法见百度百科,之前我们的课程设计也做过这个。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:55605次
    • 积分:3195
    • 等级:
    • 排名:第10669名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:7条
    文章分类
    最新评论