华为OD技术一面手撕题

150. 逆波兰表达式求值 来自leecode

给你一个字符串数组 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
Go 复制代码
func evalRPN(tokens []string) int {
    myStack := make([]int, 0)

	for _, token := range tokens {
		if num, err := strconv.Atoi(token); err == nil {
			myStack = append(myStack, num)
		} else {
			numi := myStack[len(myStack)-1]
			numj := myStack[len(myStack)-2]
			numItem := 0
			if token == "+" {
				numItem = numi + numj
			} else if token == "-" {
				numItem = numj - numi
			} else if token == "*" {
				numItem = numj * numi
			} else if token == "/" {
				numItem = numj / numi
			}
			myStack = myStack[:len(myStack)-2]
			myStack = append(myStack, numItem)
		}

	}
	return myStack[0]
}

这道题主要还是用到了栈的处理方法

相关推荐
塔中妖11 小时前
【华为OD】分割数组的最大差值
数据结构·算法·华为od
塔中妖1 天前
【华为OD】数字游戏
算法·游戏·华为od
熊文豪2 天前
【华为OD】找出通过车辆最多颜色
算法·华为od
塔中妖2 天前
【华为OD】环中最长子串2
算法·华为od
熊文豪2 天前
【华为OD】区块链文件转储系统
算法·华为od·区块链
塔中妖2 天前
【华为OD】Linux发行版的数量
linux·算法·华为od
熊文豪2 天前
【华为OD】阿里巴巴找黄金宝箱
算法·华为od
塔中妖2 天前
【华为OD】5G网络建设
网络·5g·华为od
塔中妖3 天前
【华为OD】查找接口成功率最优时间段
算法·链表·华为od
塔中妖3 天前
【华为OD】最大子矩阵和
算法·华为od·矩阵