当前位置:网站首页>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
}边栏推荐
猜你喜欢

FP6606CLP5 SOP-8 USB Type-C和PD充电控制器

Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works (7) Mid-term Inspection Report

方法的使用

详细教学——1688关键词搜索API操作流程

腾讯架构师是如何解释:Redis高性能通信的原理(精华版)

Flink Learning 9: Configure the idea to develop the flink-Scala program environment

深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发

Security First: Tools You Need to Know to Implement DevSecOps Best Practices

二舅“反转”了?

全面认识二极管,一篇文章就够了
随机推荐
判断文件属主
每日优鲜倒了,叮咚买菜的春天在哪?
小程序毕设作品之微信体育馆预约小程序毕业设计成品(6)开题答辩PPT
详细教学——1688关键词搜索API操作流程
2021年下半年软件设计师上午真题
创新云集技术咖,工赋汇聚实战派:2022工赋开发者峰会
The days of patching are more difficult than the days of writing code
9月起中国给予多哥等16国98%税目产品零关税待遇
Several common cross-domain solutions
Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
2022安全员-C证考试题库模拟考试平台操作
Redis的介绍和使用
AI+医疗:使用神经网络进行医学影像识别分析
红队实战靶场ATT&CK(一)
打补丁的日子,比写代码的日子难熬多了
阿波罗 planning代码-modules\planning\lattice\trajectory_generation\PiecewiseBrakingTrajectoryGenerator类详解
2022高压电工特种作业证考试题库及答案
MySQL表的约束
Remember the stuck analysis of an industrial automation control system in .NET
H.265视频流媒体播放器EasyPlayer.js集成时报错“SourceBuffer ”如何解决?