看完这边文章你会发现逆波兰表达式如此简单

一.中(后)缀表达式定义

首先,我们了解一下什么叫是中缀表达式,什么是后缀表达式

中缀表达式:一种通用的算数或逻辑表达方式。

后缀表达式:中缀表达式利于人的理解,但不便于计算机的处理。 因此需要将中缀表达式转换成 ,后缀表达式,以方便计算机处理。 所谓后缀表达式就是将运算符放在运算数之后。 后缀表达式也称为逆波兰表达式

如何快速用简便方法将中缀表达式转换为后缀表达式

例:(a+b+c*d)/e 转化为中缀表达式为 ab+cd*+e/

按照加减乘除的运算先后循序给他们依次加上括号( ( (a+b)+(c*d) )/e),然后将运算符移到对应的 括号外面 (((ab)+(cd)*)+e)/,将所有的括号都去掉,这样我们就得到了他的后缀表达式 从 ab+cd*+e/,以后若有此类选择题可以用其简便方式。

此时若要想时用计算机语言来求一个逆波兰表达式的值我们应该怎样处理,这里就是用到相关的知识

二.题目

根据 逆波兰表示法,求表达式的值。

有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

注意 两个整数之间的除法只保留整数部分。
力扣链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation

三.思路简述

通过以上简便方法,我们也求得逆波兰表达式

 

 如果遇到操作数,则将操作数入栈;

如果遇到运算符,则将两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。

 四.代码演示

1.先定义一个栈

2.使用for循环来遍历该字符串

3.写一个函数来判断当前遇到的字符串是否为运算符

4.然后进行运算并返回其结果

class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack  = new Stack<>();//定义一个栈
        for(String x : tokens){
            if(!isOperation(x)){
                //说明当前字符串为数字
                stack.push(Integer.parseInt(x));
            }else{
                //当前为运算符
                int num2 = stack.pop();
                int num1 = stack.pop();
                switch(x){//num1 num2位置不同会导致错误
                    case"+":
                        stack.push(num1+num2);
                        break;
                    case"-":
                        stack.push(num1-num2);
                        break;
                    case"*":
                        stack.push(num1*num2);
                        break;
                    case"/":
                        stack.push(num1/num2);
                        break;

                }

            }
        }
        return stack.pop();
    }

        //判断是否为字符串
        private boolean isOperation(String s){
            if(s.equals("+") || s.equals("-") || s.equals("*") || s.equals("/")){
                return true;
            }
            return false;
        }
}

    

 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值