首页 > 其他分享 >150. 逆波兰表达式求值

150. 逆波兰表达式求值

时间:2023-11-05 14:32:28浏览次数:35  
标签:150 17 pop tokens long 求值 stack 表达式

150. 逆波兰表达式求值

题目描述

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。 注意:

  • 有效的算符为 '+'、'-'、'*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 1:

输入:tokens = ["2","1","+","3","*"]

输出:9

解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9


示例 2:

输入:tokens = ["4","13","5","/","+"]

输出:6

解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6


示例 3:

输入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]

输出:22

解释: 该算式转化为常见的中缀算术表达式为:
((10 * (6 / ((9 + 3) * -11))) + 17) + 5

= ((10 * (6 / (12 * -11))) + 17) + 5

= ((10 * (6 / -132)) + 17) + 5

= ((10 * 0) + 17) + 5

= (0 + 17) + 5

= 17 + 5

= 22

提示:

  • 150. 逆波兰表达式求值_中缀
  • tokens[i] 是一个算符("+"、"-"、"*" 或 "/"),或是在范围 [-200, 200] 内的一个整数


单调栈+code

  • 需要注意的点是:在计算过程中的树可能会超出 int 类型范围
package new_start.leet_code;

import java.util.Deque;
import java.util.LinkedList;

/**
 * desc :
 * <p>
 * create time : 2023/10/14 22:25
 */
public class L_150 {

    public int evalRPN(String[] tokens) {
        Deque<Long> stack = new LinkedList<>();
        for (String token : tokens) {
            if(token.equals("+")) {
                if(stack.size() > 1) {
                    long l = stack.pop() + stack.pop();
                    stack.push(l);
                }
            } else if(token.equals("-")) {
                if(stack.size() > 1) {
                    long e1 = stack.pop();
                    long e2 = stack.pop();
                    stack.push(e2 - e1);
                }
            } else if(token.equals("*")) {
                if(stack.size() > 1) {
                    long e1 = stack.pop();
                    long e2 = stack.pop();
                    stack.push(e2 * e1);
                }
            } else if(token.equals("/")) {
                if(stack.size() > 1) {
                    long e1 = stack.pop();
                    long e2 = stack.pop();
                    stack.push(e2 / e1);
                }
            } else {
                stack.push(Long.valueOf(token));
            }
        }
        return Math.toIntExact(stack.pop());
    }

}

标签:150,17,pop,tokens,long,求值,stack,表达式
From: https://blog.51cto.com/u_16079703/8193784

相关文章

  • 使用Python和正则表达式格式化字符串中的所有数字
    在处理文本数据时,我们经常需要提取或格式化特定的信息。在这些情况下,Python的正则表达式库(re模块)可以非常有用。让我们看一个具体的例子,如何使用Python和正则表达式来格式化字符串中的所有数字。首先,我们需要导入Python的正则表达式库。在Python中,正则表达式的操作主要通过"re"模块......
  • 正则表达式:IP地址和子网掩码
    #IP地址echoX.X.X.X|grep-E'^(22[0-3]|2[0-1][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}$'#子网掩码echoX.X.X.X|grep-E'^((255.255.255.(0|128|192|224|240|248|252|254|255))|(255.255.(0|128......
  • 电流的微观表达式
    1)建立模型对于一根粗细均匀的长导体,规定:它的长度为\(l(m)\)它的横截面积为\(S(m^2)\)单位体积中自由电荷数\(n(mol)\)自由电荷在导体中的运动速度\(v(m·s^{-1})\)每个自由电荷平均带电量\(q(C)\)2)理论推导该导体中自由电荷的总数为:\[N=n·l·S\]总电荷量为:\[Q......
  • MySQL正则表达式
    1. 正则表达式运算符expressionNOTREGEXPpattern,expressionNOTRLIKEpatternexpressionREGEXPpattern,expressionRLIKEpattern如果表达式expression匹配给定模式pattern返回1,否则返回0.如果表达式expression或者模式pattern为NULL,则返回NULLRLIKE和REGEXP一样.2......
  • Lambda 表达式
    Lambda表达式参考文档:Lambda学会这几种即可【IT老齐289】Java语法中的方法引用::是什么?Java8新特性之二:方法引用Lambda使用场景Lambda只能使用在函数式接口,​什么是函数式接口:​就是一个​有且仅有一个抽象方法​,但是可以有​多个非抽象方法的接口。函数式接口可以被隐......
  • 童程OJ1508 小木棍 困难- 深搜/剪枝
    记忆步骤:1.全局变量应该有木棍数组a和标记数组vis主函数:1.最小木棍长度len,标记是否有答案变量f2.输入,并记录木棍的最大值maxx和全部长度sum3.从大到小排序4.遍历len从maxx到sum,如果sum刚好是len的倍数,那么证明有复原方案,进行深搜dfs函数:1.dfs(已经使用的木棍数量tot,当前复原木棍长......
  • Kotlin语言基础入门到熟悉:Lambda 表达式
    什么是Lambda表达式?Lambda表达式,其实就是匿名函数。而函数其实就是功能(function),匿名函数,就是匿名的功能代码了。在Kotlin当中,函数也是作为类型的一种出现的,尽管在当前的版本中,函数类型的灵活性还不如Python这样的语言,不过它也是可以被赋值和传递的,这主要就体现在Lambda表......
  • Python 正则表达式(RegEx)指南
    正则表达式(RegEx)是一系列字符,形成了一个搜索模式。RegEx可用于检查字符串是否包含指定的搜索模式。RegEx模块Python中有一个内置的包叫做re,它可以用于处理正则表达式。导入re模块:importrePython中的RegEx,一旦导入了re模块,您就可以开始使用正则表达式了。示例:搜索......
  • Python 正则表达式(RegEx)指南
    正则表达式(RegEx)是一系列字符,形成了一个搜索模式。RegEx可用于检查字符串是否包含指定的搜索模式。RegEx模块Python中有一个内置的包叫做re,它可以用于处理正则表达式。导入re模块:importrePython中的RegEx,一旦导入了re模块,您就可以开始使用正则表达式了。示例:搜索......
  • 正则表达式语法大全
     正则表达式基本符号:^表示匹配字符串的开始位置(例外用在中括号中[]时,可以理解为取反,表示不匹配括号中字符串)$表示匹配字符串的结束位置*表示匹配零次到多次+表示匹配一次到多次(至少有一次)?表示匹配零次或一次.表示匹配单个字符|表示为或者,两项中取一项()......