当前位置:网站首页>golang刷leetcode 字符串(4)逆波兰式
golang刷leetcode 字符串(4)逆波兰式
2022-08-02 17:38:00 【用户9710217】
根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:
输入: ["2", "1", "+", "3", "*"]
输出: 9
解释: ((2 + 1) * 3) = 9示例 2:
输入: ["4", "13", "5", "/", "+"]
输出: 6
解释: (4 + (13 / 5)) = 6示例 3:
输入: ["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解题思路:
本题很简单,理解逆波兰式就ok
逆波兰式求解原理:
1,从左往右扫描token
2,如果式操作数,入栈
3,如果是操作符,弹出两个操作数
4,计算结果,将结果入栈
5,扫描完token,栈中,剩下结果,结果出栈
import "strconv"
func evalRPN(tokens []string) int {
var s stack
for i := 0; i < len(tokens); i++ {
if !isOperator(tokens[i]) {
s.Push(tokens[i])
} else {
op2 := s.Pop()
op1 := s.Pop()
res := eval(op1, op2, tokens[i])
s.Push(fmt.Sprint(res))
}
}
r := s.Pop()
rv, _ := strconv.ParseInt(r, 10, 64)
return int(rv)
}
func eval(op1 string, op2 string, token string) int64 {
o1, _ := strconv.ParseInt(op1, 10, 64)
o2, _ := strconv.ParseInt(op2, 10, 64)
switch token {
case "+":
return o1 + o2
case "-":
return o1 - o2
case "*":
return o1 * o2
case "/":
return o1 / o2
}
return 0
}
func isOperator(token string) bool {
return token == "+" || token == "-" || token == "*" || token == "/"
}
type stack struct {
data []string
}
func (s *stack) Push(str string) {
s.data = append(s.data, str)
}
func (s *stack) Pop() string {
if len(s.data) < 1 {
return ""
}
str := s.data[len(s.data)-1]
s.data = s.data[:len(s.data)-1]
return str
}边栏推荐
- 【秒杀办法】根据二叉树的先序遍历、中序遍历、后序遍历快速创建二叉树
- 暴跌99.7%后,谁还在买卖「二舅币」?
- golang刷leetcode 经典(5)设计哈希集合
- Mysql和Redis如何保证数据一致性
- executeScript异步执行的时候没有返回值的原因
- MySQL基本操作和基于MySQL基本操作的综合实例项目
- MySQL基本语法
- golang源码分析(12)martini源码分析
- Go 语言快速入门指南:第二篇 变量与常量
- Since September, China has granted zero-tariff treatment to 98% of tax items from 16 countries including Togo
猜你喜欢
随机推荐
如何生成随机数+原理详细分析
【秒杀办法】根据二叉树的先序遍历、中序遍历、后序遍历快速创建二叉树
What is the difference between erp system and wms system
Arduino hardware programming introduction to language learning
究极异常处理逻辑——多层次异常的处理顺序
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works Mini Program Graduation Design Finished Work (6) Question Opening Reply PPT
白话电子签章原理及风险
golang刷leetcode 经典(6) 实现跳表
蔚来杯2022牛客暑期多校训练营5 ABCDFGHK
潮玩的“第二春”,在哪?
golang源码分析(12)martini源码分析
影响PoE供电传输距离的除了网线还有啥?
shell中awk命令的if条件语句引入外置变量
MySQL基本操作和基于MySQL基本操作的综合实例项目
STL案例-招聘新员工
cpolar应用实例之多设备数据采集
全面认识二极管,一篇文章就够了
Go 语言快速入门指南:第二篇 变量与常量
恒驰5真的没大卖
在线文档Sheet技术解析









