逆波兰表达式求值

简介: ✅每日一练 逆波兰表达式求值✅力扣:150. 逆波兰表达式求值 - 力扣(LeetCode)

一,中缀表达式和后缀表达式


    首先我们需要一个知识储备,如何将中缀表达式转化为后缀表达式(逆波兰表达式),并且了解他的计算原理。


步骤:


第一步:给所有要计算的值加上括号

第二步:将括号里的位运算符号移到括号外

第三步:去掉括号,得到逆波兰表达式


就拿题目里的例子来说:

868965b4718b4c0ab6a37ed1e280655c.png 计算原理:将数字依次入栈,遇到操作符弹出2个数字,并将第一个弹出的数字作为右操作数,第二个作为左操作数,将第一次计算的结果再入栈,依次循环,得到最终结果。

bfa0e9c6d2434663a305ab61a753882c.png

二,代码求解

    思想:这题是典型的利用栈的思想去解决问题,利用压栈和出栈的操作可以解决,首先定义一个栈,然后遍历这个字符数组,遇到数字就压栈,遇到位操作符就出栈,这里要注意出栈的细节,定义俩个变量来控制左右操作数,然后用switch语句来实现加减乘除的运算,最后得到的数就是计算的结果。

代码如下:

publicintevalRPN(String[] tokens) {
Stack<Integer>stack=newStack<>();
for (Stringx : tokens) {
//判断获取到的是数字还是符号if (!isOperation(x)) {
stack.push(Integer.parseInt(x));
            } else {
intnum2=stack.pop();
intnum1=stack.pop();
switch (x) {
case"+":
stack.push(num1+num2);
break;
case"-":
stack.push(num1-num2);
break;
case"*":
stack.push(num1*num2);
break;
case"/":
stack.push(num1/num2);
break;
                }
            }
        }
returnstack.pop();//获取最后的值    }
//判断位操作符privatebooleanisOperation(Stringx) {
if (x.equals("+") ||x.equals("-") ||x.equals("*") ||x.equals("/")) {
returntrue;
        }
returnfalse;
    }


目录
相关文章
【逆波兰表达式求值】
【逆波兰表达式求值】
10_逆波兰表达式求值
10_逆波兰表达式求值
|
4月前
【LeetCode 25】150.逆波兰表达式求值
【LeetCode 25】150.逆波兰表达式求值
20 0
|
6月前
|
算法
【算法】栈算法——逆波兰表达式求值
【算法】栈算法——逆波兰表达式求值
|
9月前
彻底大悟!逆波兰表达式求值(150)
彻底大悟!逆波兰表达式求值(150)
|
9月前
逆波兰表达式求值
逆波兰表达式求值
82 1
|
9月前
|
Java C++ Python
leetcode-150:逆波兰表达式求值
leetcode-150:逆波兰表达式求值
57 0
|
9月前
|
NoSQL 容器 消息中间件
栈和队列及表达式求值问题
栈和队列及表达式求值问题
LeetCode 150 逆波兰表达式求值
构造一个栈,遇到运算符就弹出进行运算
7-323 逆波兰表达式
7-323 逆波兰表达式
68 0