2021-09-19:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。
2021-09-19:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。
福大大 答案2021-09-19:
递归。
参数1:左括号-右括号的数量。
参数2:左括号剩多少。
代码用golang编写。代码如下:
package main
import "fmt"
func main() {
n := 3
ret := generateParenthesis(n)
fmt.Println(ret)
ret2 := generateParenthesis2(n)
fmt.Println(ret2)
}
func generateParenthesis(n int) []string {
path := make([]byte, n<<1)
ans := make([]string, 0)
process(path, 0, 0, n, &ans)
return ans
}
// path 做的决定 path[0....index-1]做完决定的!
// path[index.....] 还没做决定,当前轮到index位置做决定!
func process(path []byte, index int, leftMinusRight int, leftRest int, ans *[]string) {
if index == len(path) {
*ans = append(*ans, string(path))
} else {
// index ( )
if leftRest > 0 {
path[index] = '('
process(path, index+1, leftMinusRight+1, leftRest-1, ans)
}
if leftMinusRight > 0 {
path[index] = ')'
process(path, index+1, leftMinusRight-1, leftRest, ans)
}
}
}
// 不剪枝的做法
func generateParenthesis2(n int) []string {
path := make([]byte, n<<1)
ans := make([]string, 0)
process2(path, 0, &ans)
return ans
}
func process2(path []byte, index int, ans *[]string) {
if index == len(path) {
if isValid(path) {
*ans = append(*ans, string(path))
}
} else {
path[index] = '('
process2(path, index+1, ans)
path[index] = ')'
process2(path, index+1, ans)
}
}
func isValid(path []byte) bool {
count := 0
for _, cha := range path {
if cha == '(' {
count++
} else {
count--
}
if count < 0 {
return false
}
}
return count == 0
}
执行结果如下:

2021-09-19:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。的更多相关文章
- 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。
题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法 ...
- python小练习,打出1-100之间的所有偶数,设计一个函数,在桌面上创建10个文件,并以数字命名,复利计算函数
练习一:打出1-100之间的所有偶数 def even_print(): for i in range(1,101): if i % 2 == 0: print (i) even_print() #列 ...
- GANs用于文本生成
上学期期末老师给了我本杂志让我好好看看里面的Gans网络是如何应用在文本生成上的,文章里面也没有介绍原理性的东西,只是说了加入这个Gans模型后效果有多好,给出了模型架构图和训练时所用的语料例子,也没 ...
- c#用正则表达式判断字符串是否全是数字、小数点、正负号组成 Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");
Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][ ...
- 2021.12.19 eleveni的刷题记录
2021.12.19 eleveni的刷题记录 0. 本次记录有意思的题 0.1 每个点恰好经过一次并且求最小时间 P2469 [SDOI2010]星际竞速 https://www.luogu.com ...
- sscanf 函数 分类: POJ 2015-08-04 09:19 4人阅读 评论(0) 收藏
sscanf 其实很强大 分类: 纯C技术 技术笔记 2010-03-05 16:00 12133人阅读 评论(4) 收藏 举报 正则表达式stringbuffercurlgoogle 最近在做日志分 ...
- jQuery---钢琴案例 (按下1-9数字键,能触发对应的mouseenter事件)
钢琴案例 (按下1-9数字键,能触发对应的mouseenter事件) 1. 结合之前的学习,主要内容,就是on注册keyup事件,函数里传入e, 用e.keyCode,来获取1-9的数字的范围. 如果 ...
- win10系统U盘读取不了怎么解决 三种方法快速解决"文件或目录损坏且无法读取& 发布时间:2020-06-05 09:19:46 作者:佚名 我要评论
win10系统U盘读取不了怎么解决 三种方法快速解决"文件或目录损坏且无法读取& 发布时间:2020-06-05 09:19:46 作者:佚名 我要评论 win10电脑 ...
- 日常Javaweb 2021/11/19
Javaweb Dao层: //连接数据库,实现增查功能 package dao; import java.sql.Connection; import java.sql.DriverManager; ...
- 2021.07.19 P2294 狡猾的商人(差分约束)
2021.07.19 P2294 狡猾的商人(差分约束) [P2294 HNOI2005]狡猾的商人 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.差分约束最长路与最短 ...
随机推荐
- 多路复用IO:select poll epoll
[电话面试]io多路复用专题面试 这个真猛 有人做了笔记:点这里 select Select(Max+1,&rset,null,null,null)是因为0~max是max+1. 过程: 将文 ...
- Windows 10 G 神州网信政府版
神州网信政府版2018版:Win10 CMGE_V0-H.1020.000.iso校验码:9484e568c6505f9c4ad5b9fcf7ec8d83588eebfb38089f53e33011 ...
- JUC源码学习笔记8——ConcurrentHashMap源码分析1 如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移
源码基于jdk1.8 这一片主要讲述ConcurrentHashMap如何实现低粒度锁的插入,如何实现统计元素个数,如何实现并发扩容迁移 系列文章目录和关于我 一丶ConcurrentHashMap概 ...
- Redis 故障排查
系统性学习,移步IT-BLOG 要进行 Redis 的故障定位,一般通过分析 Redis 日志.应用日志和 Redis 的监控信息来定位相关问题. 一.Redis 日志设置 [1]日志文件:Redis ...
- Auto Photoshop StableDiffusion - 这是一款可以在 Photoshop 中使用 AI 智能 Automatic1111 进行插画、海报等设计的插件
简介 Auto Photoshop StableDiffusion - 这是一款可以在 Photoshop 中使用 AI 智能 Automatic1111 进行插画.海报等设计的插件,此插件可以是你在 ...
- 如何用浏览器读取本地文件(兼容IE8),new bing能帮我吗?
浏览器读写文件? 有一份老旧而精巧的代码(2006或更早),带js的html,可以只用浏览器来处理一些二进制存档数据. 文件的读写怎么办?通过变动的方法来完成. 利用十六进制编辑软件如WinHEX,直 ...
- buuctf-RE-SimpleRev
IDA 打开 将main函数反编译为C代码 1 int __cdecl __noreturn main(int argc, const char **argv, const char **envp) ...
- 项目讲解之火爆全网的开源后台管理系统RuoYi
博主是在2018年中就接触了 RuoYi 项目 这个项目,对于当时国内的开源后台管理系统来说,RuoYi 算是一个完成度较高,易读易懂.界面简洁美观的前后端不分离项目. 对于当时刚入行还在写 jsp ...
- 一些随笔 No.2
数据库 单表VS多表联合 多表联合查询的优势区域在于敏捷开发,主要用于过于庞大却可拆分的储存需求 但是劣势也很明显:更多的查询约束条件会用掉数据库服务器额外的cpu/内存/io,也不方便更未来的分布式 ...
- python之sys库
sys --- 系统相关的参数和函数 该模块提供了一些变量和函数.这些变量可能被解释器使用,也可能由解释器提供.这些函数会影响解释器.本模块总是可用的. sys.abiflags 在POSIX系统上, ...