2021-09-06:给表达式添加运算符。给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有
2021-09-06:给表达式添加运算符。给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有能够得到目标值的表达式。力扣282。
福大大 答案2021-09-06:
递归。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
num := "123"
target := 6
ret := addOperators(num, target)
fmt.Println(ret)
}
func addOperators(num string, target int) []string {
ret := make([]string, 0)
if len(num) == 0 {
return ret
}
// 沿途的数字拷贝和+ - * 的决定,放在path里
path := make([]byte, len(num)*2-1)
// num -> char[]
digits := []byte(num)
n := 0
for i := 0; i < len(digits); i++ { // 尝试0~i前缀作为第一部分
n = n*10 + int(digits[i]) - '0'
path[i] = digits[i]
dfs(&ret, &path, i+1, 0, n, &digits, i+1, target) // 后续过程
if n == 0 {
break
}
}
return ret
}
// char[] digits 固定参数,字符类型数组,等同于num
// int target 目标
// char[] path 之前做的决定,已经从左往右依次填写的字符在其中,可能含有'0'~'9' 与 * - +
// int len path[0..len-1]已经填写好,len是终止
// int pos 字符类型数组num, 使用到了哪
// left -> 前面固定的部分 cur -> 前一块
// 默认 left + cur ...
func dfs(res *[]string, path *[]byte, len2 int, left int, cur int, num *[]byte, index int, aim int) {
if index == len(*num) {
if left+cur == aim {
//res.add(new String(path, 0, len));
*res = append(*res, string((*path)[0:len2]))
}
return
}
n := 0
j := len2 + 1
for i := index; i < len(*num); i++ { // pos ~ i
// 试每一个可能的前缀,作为第一个数字!
// num[index...i] 作为第一个数字!
n = n*10 + int((*num)[i]) - '0'
(*path)[j] = (*num)[i]
j++
(*path)[len2] = '+'
dfs(res, path, j, left+cur, n, num, i+1, aim)
(*path)[len2] = '-'
dfs(res, path, j, left+cur, -n, num, i+1, aim)
(*path)[len2] = '*'
dfs(res, path, j, left, cur*n, num, i+1, aim)
if (*num)[index] == '0' {
break
}
}
}
执行结果如下:

2021-09-06:给表达式添加运算符。给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target ,在 num 的数字之间添加 二元 运算符(不是一元)+、- 或 * ,返回所有的更多相关文章
- 查找常用字符(给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。)
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表. 例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 ...
- 2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ π )
2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ \(\pi\) ) https://www.luogu.com.cn/problem/P2508 题意: 求一个给定的圆 \( ...
- 2021.08.06 P3478 STA-Station(树形结构)
2021.08.06 P3478 STA-Station(树形结构) [P3478 POI2008]STA-Station - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给 ...
- 2021.09 ccf csp 第四题 收集卡牌
2021.09 ccf csp 第四题 收集卡牌 思路 这题如果直接计算,因为不同的分类种数太多,枚举所有的分类情况是一个几乎不可能的复杂任务. 但不同摸牌次数,不同已摸出牌种类的子问题的答案之间,具 ...
- 给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 ,返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况)
""" #给定一个只包含正整数的非空数组,返回该数组中重复次数最多的前N个数字 #返回的结果按重复次数从多到少降序排列(N不存在取值非法的情况) 解题思路: 1.设定一个 ...
- 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。
在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"LX"替换一个"XL ...
- Heartbeat took longer than "00:00:01" at "09/06/2019 05:08:08 +00:00".
.netcore在k8s+docker+linux,部署后,偶尔会报这样的警告 Warn:Microsoft.AspNetCore.Server.KestrelHeartbeat took longe ...
- 给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回
给定一个英文字符串,请编写一个PHP函数找出这个字符串中首先出现三次的那个英文字符(需要区分大小写),并返回 //统计字符串中出现的字符的出现次数 public function strNum(){ ...
- 2021.12.06 平衡树——Treap
2021.12.06 平衡树--Treap https://www.luogu.com.cn/blog/HOJQVFNA/qian-xi-treap-ping-heng-shu 1.二叉搜索树 1.1 ...
- 2021.12.06 P2511 [HAOI2008]木棍分割(动态规划)
2021.12.06 P2511 [HAOI2008]木棍分割(动态规划) https://www.luogu.com.cn/problem/P2511 题意: 有n根木棍, 第i根木棍的长度为 \( ...
随机推荐
- HTML-CSS常用代码
注释标签:对代码进行说明<!-- 单行注释,也可以对多行文字进行注释 -->常用格式标签<b>加粗</b> <i>斜体</i> <u& ...
- 多线程中使用COM 的注意事项
最近做了一个TCP Server的程序,其中需用使用COM组件,但是tcp 的部分是阻塞的,所以开了一个线程用来专门接收来自客户端的信号,当接收到信号后,再根据情况处理. 按照这个思路,在程序的一开始 ...
- 无法下载外网Docker镜像的解决方案
概述 在安装k8s相关组件时经常会遇到需要下载一些外网的Docker镜像仓库,比如k8s的一个NFS存储类k8s.gcr.io/sig-storage/nfs-subdir-external-prov ...
- Linux & 标准C语言学习 <DAY8_2>
一.函数 Function 一段具有某一项功能的代码集合,是C语言管理代码的最小单位 把代码封装成一个个函数,方便管理和调用函数 1.函数分类 标准库函数: ...
- 手撕Ford-Fulkerson algorithm 学一半的笔记
目录 定义大概就这些 伪代码 自己做slide里的quiz 搬运别人的代码 我明白了, 余量网络 名如其名 比如你f/c=3/5 那么正边2,reverse edge3,加起来是5 在这个你建的新图上 ...
- C++内存重叠
内存重叠是指在内存中存在两个或多个区域,它们的地址范围有交叉部分.在 C++ 中,内存重叠可能会导致程序出现不可预期的行为,因此我们需要了解它的原因和如何避免. 内存重叠的原因 内存重叠的主要原因是指 ...
- 全局唯一ID的实现方案
为什么需要保证唯一ID? 在单机服务架构中,数据库的每一个业务表的主键ID都是允许自增的,但是在分布式服务架构的分库分表的设计,使得多个库或者多个表存储了相同的业务表,如果没有一个全局的唯一ID设计方 ...
- Go语言实现TCP通信
TCP协议为传输控制协议,TCP协议有以下几个特点:1. TCP是面向连接的传输层协议:2. 每条TCP连接只能有两个端点,每条TCP连接是点到点的通信:3. TCP提供可靠的交付服务,保证传送的数据 ...
- Kafka存储内幕详解
1.概述 随着微服务和分布式计算的出现,Kafka已经成为各种主流平台系统架构中不可缺少的组成部分了.在本篇文章中,笔者将尝试为大家来解密Kafka的内部存储机制是如何运作的. 2.内容 在分布式系统 ...
- Goalng:基础复习一遍过
Go(又称Golang)是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言. 剖析 Hello world 新建文件 main.go 写入以下内容: package ma ...