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

150. 逆波兰表达式求值

时间:2022-12-30 12:34:55浏览次数:56  
标签:150 num1 17 tokens append 求值 stack 表达式

150. 逆波兰表达式求值

难度中等650收藏分享切换为英文接收动态反馈

给你一个字符串数组 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

提示:

  • 1 <= tokens.length <= 104
  • tokens[i] 是一个算符("+""-""*""/"),或是在范围 [-200, 200] 内的一个整数

解法一

func evalRPN(tokens []string) int {
    var stack []int
    for i:=0;i<len(tokens);i++{
        if (tokens[i]=="+")||(tokens[i]=="-")||(tokens[i]=="*")||(tokens[i]=="/"){
            num1:=stack[len(stack)-2]   
            num2:=stack[len(stack)-1]
            stack=stack[:len(stack)-2]
            if tokens[i]=="+"{
                num3:=num1+num2
                stack=append(stack,num3)
            }
            if tokens[i]=="-"{
                num3:=num1-num2
                 stack=append(stack,num3)
            }
            if tokens[i]=="*"{
                num3:=num1*num2
                 stack=append(stack,num3)
            }
            if tokens[i]=="/"{
                num3:=num1/num2
                stack=append(stack,num3)
            }

        }else{
            token,_:= strconv.Atoi(tokens[i])
            stack=append(stack,token)
        }
    }

    return stack[0]

}

解法二:

func evalRPN(tokens []string) int {
	stack := []int{}
	for _, token := range tokens {
		val, err := strconv.Atoi(token)
		if err == nil {
			stack = append(stack, val)
		} else {   // 如果err不为nil说明不是数字
			num1, num2 := stack[len(stack)-2], stack[(len(stack))-1]
			stack = stack[:len(stack)-2]
			switch token {
			case "+":
				stack = append(stack, num1+num2)
			case "-":
				stack = append(stack, num1-num2)
			case "*":
				stack = append(stack, num1*num2)
			case "/":
				stack = append(stack, num1/num2)
			}
		}
	}
	return stack[0]
}

标签:150,num1,17,tokens,append,求值,stack,表达式
From: https://www.cnblogs.com/suehoo/p/17014616.html

相关文章

  • java用正则表达式脱敏手机号
    一种正则形式:在Java开发中有时候需要对敏感字段数据脱敏,废话不多说,直接上代码。       /**        *脱敏手机号        *        *@......
  • 【C++11】lambda表达式
    什么是lambda表达式lambda表达式其实就是一个匿名函数对象。对象:即可以作为一个变量使用,进行复制和作为其他函数参数调用函数:即带有代码块,里面封装了一些操作语句匿名......
  • HZNUOJ-1503公路乘车--DP
    题目传送门:https://acm.hznu.edu.cn/OJ/problem.php?id=1503题解:我们发现后一状态由前一状态决定,即后一公里由前面十公里的状态决定,经典dp,我们直接列出状态转移方程:dp[1]......
  • Js利用正则表达式去除字符串的中括号
    原文链接:点我  //功能:1)去除字符串前后所有空格   //     2)去除字符串中所有空格(包括中间空格,需要设置第2个参数为:g)   functionTrim(str,is_g......
  • mysql中的IF表达式
    IF表达式IF(expr1,expr2,expr3);如果expr1为TRUE,则IF()返回值为expr2,否则返回值为expr3updatesalarysetsex=if(sex='男','女','男')这是leetcode上的一道题,将sal......
  • 如何在表格中写正则表达式来提取电话号码?
    正则表达式,是描述匹配模式(pattern)的文本字符串,用于搜索和匹配字符串集。简单来说,就是可以通过从一堆字符串里,搜索提取自己想要的内容。Excel网络函数库帮助使用者们在Ex......
  • [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函
    函数式接口详细定义packagejava.lang;importjava.lang.annotation.*;/***Aninformativeannotationtypeusedtoindicatethataninterface*typedeclarationisin......
  • Thymeleaf 表达式工具类
    Thymeleaf默认提供了丰富的表达式工具类,这里列举一些常用的工具类。Objects工具类/**当obj不为空时,返回obj,否则返回default默认值*其同样适用于数组、列表或集合*/${#obje......
  • 正则表达式 元字符列表
    正则表达式\w\s\d\b.匹配除换行符以外的任意字符 \w匹配字母或数字或下划线或汉字等价于'[A-Za-z0-9_]'。 \s匹配任意的空白符 \d匹配数字 \b匹配单词的开......
  • 笔记本默认设置125%或者150%缩放,导致布局错乱的解决方法
    目录一:为什么会出现有这个问题?二:有什么解决方案?三:vue项目utils下新建js四:全局导入App.vue五:重新进入项目六:注意事项一:为什么会出现有这个问题?因为现在很多14寸......