当前位置:网站首页>golang刷leetcode 经典(9)为运算表达式设计优先级
golang刷leetcode 经典(9)为运算表达式设计优先级
2022-08-02 18:54:00 【用户9710217】
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
示例 1:
输入: "2-1-1"
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
示例 2:
输入: "2*3-4*5"
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
解题思路:
1,将输入字符串拆分成token
2,在任意运算符所在位置将数组拆分成两部分
3,递归对两部分求值
4,对值进行运算
func diffWaysToCompute(input string) []int {
t:=strToTok(input)
fmt.Println(t)
return cal(t)
}
func cal(t[]Token)[]int{
var r []int
if len(t)==1{
r=append(r,t[0].value)
return r
}
for i:=1;i<len(t);i+=2{
la:=cal(t[:i])
ra:=cal(t[i+1:])
for _,l:=range la{
for _,r1:=range ra{
switch t[i].op{
case '+':
r=append(r,l+r1)
case '-':
r=append(r,l-r1)
case '*':
r=append(r,l*r1)
}
}
}
}
return r
}
type Token struct{
tokenType int //0 num 1 op
value int
op byte
}
func strToTok(input string)[]Token{
var r []Token
for i:=0;i<len(input);{
if input[i]=='+' || input[i]=='-' || input[i]=='*' {
r=append(r,Token{
tokenType:1,
op:input[i],
})
i++
}
num:=0
for i<len(input)&& input[i]>='0' && input[i]<='9'{
num=num*10+int(input[i]-'0')
i++
}
r=append(r,Token{
value:num,
})
}
return r
}
边栏推荐
- 治疗 | 如何识别和处理消极想法
- NIO's Selector execution process
- 日常开发中,String类中常用的方法
- EMQX Newsletter 2022-07|EMQX 5.0 正式发布、EMQX Cloud 新增 2 个数据库集成
- Gradle系列——Gradle的build.gradle文件详情,项目发布(基于Gradle文档7.5)day3-3
- Golang swagger :missing required param comment parameters
- geoserver+mysql+openlayers问题点
- 动态生成不同类型的订单,请问如何存放到Mongodb数据库?
- 流量分析第一题
- C#里如何简单的校验时间格式
猜你喜欢
栈、队列和数组
Three components of NIO foundation
元宇宙001 | 情绪无法自控?元宇宙助你一臂之力
【LeetCode】118. 杨辉三角 - Go 语言题解
Jellyfin 打造家庭影院 & 视频硬解 (威联通 QNAP)
Unity 打包和切换平台|Build Settings窗口介绍
Mobile Banking Experience Test: How to Get the Real User Experience
【C语言刷题】Leetcode238——除自身以外数组的乘积
线程池原理与实践|从入门到放弃,深度解析
Detailed explanation of AtomicInteger
随机推荐
项目分析(复杂嵌入式系统设计)
博云入选 Gartner 中国 DevOps 代表厂商
实例033:列表转字符串
Geoserver+mysql+openlayers
清除浮动与BFC
Compose主题切换——让你的APP也能一键换肤
From the technical panorama to the actual scene, analyze the evolutionary breakthrough of "narrowband high-definition"
ROS基本编程概述
Three components of NIO foundation
健康报告-设计与实现
Mppt photovoltaic maximum power point tracking control matlab simulation
中断向量表概述
看【C语言】实现简易计算器教程,让小伙伴们为你竖起大拇指
【C语言刷题】双指针原地修改数组(力扣原题分析)
安装Mac版Mysql卡在Installation阶段,彻底清理mysql并重装mysql
深度学习-学习笔记(持续更新)
JVM内存和垃圾回收-03.运行时数据区概述及线程
3 and a half years of testing experience, I don't have 20K, it seems it's time to change jobs
Golang swagger :missing required param comment parameters
Why young people are snapping up domestic iPhone, because it is much cheaper and more populist