力扣22-括号生成
22. 括号生成 - 力扣LeetCode数字n代表生成括号的对数请你设计一个函数用于能够生成所有可能的并且有效的括号组合。示例 1输入n 3输出[((())),(()()),(())(),()(()),()()()]示例 2输入n 1输出[()]提示1 n 8本质在 0, 1, 2, ... , 2n - 1 中选择 n 个位置填入左括号其余 n 个位置填入右括号。需要注意的是对于这个字符串的任意前缀右括号的个数必须不大于左括号的个数因为左括号多了后面还可以补右括号前面的右括号多了后面补左括号也无法构成一对括号所以对于单个位置来说问题就变成 选或不选 即选左括号还是选右括号。如果当前左右括号数量相等那么就必须填左括号如果右括号个数小于左括号个数那么填右括号。由于一开始左右括号数量均为 0按照这个策略第一个位置填入的必然是左括号显然后续不可能出现右括号数量比左括号多的情况这是合理的class Solution: def generateParenthesis(self, n: int) - List[str]: ans [] path [] * (n * 2) # n 个左括号n个右括号 # left:左括号数量right:右括号数量 def dfs(left: int, right:int) - None: if right n: # 2n 个括号全部填完 ans.append(.join(path)) return if left n: # 左括号数量没有达到 n可以填 path[left right] ( dfs(left 1, right) if right left: path[left right] ) dfs(left, right 1) dfs(0, 0) return ans这里不需要做恢复现场因为是直接覆盖 left right 位置的元素的pythonfrom typing import List def generateParenthesis(n: int) - List[str]: ans [] path [] * (n * 2) # left: 左括号数量right: 右括号数量 def dfs(left: int, right: int) - None: if right n: # 填充完毕 ans.append(.join(path)) return if left n: # 可以填充左括号 path[left right] ( # 直接覆盖因此如果填充完毕path 不需要清空 dfs(left 1, right) if right left: # 可以填充右括号 path[left right] ) dfs(left, right 1) dfs(0, 0) return ans def main(): with open(input.txt, r) as f: nums f.read().split() # 遍历 input.txt 中的 n for num in nums: n int(num) result generateParenthesis(n) # 输出结果 print(fn {n}) print(result) print() if __name__ __main__: main()Javaimport java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class main { static int n; static ListString ans; static char[] path; public static ListString generateParenthesis(int n) { main.n n; ans new ArrayList(); path new char[n * 2]; dfs(0, 0); return ans; } public static void dfs(int left, int right) { if(right n) { // 填充完毕 ans.add(new String(path)); return; } if(left n) { path[left right] (; dfs(left 1, right); } if(right left) { path[left right] ); dfs(left, right 1); } } public static void main(String[] args) throws Exception { BufferedReader br new BufferedReader(new FileReader(input.txt)); StringBuilder sb new StringBuilder(); String line; while((line br.readLine()) ! null) { if(line.isEmpty()) { continue; } int n Integer.parseInt(line.trim()); ListString result generateParenthesis(n); sb.append(n ).append(n).append(\n); sb.append(result).append(\n\n); } System.out.println(sb); } }Gopackage main import ( fmt os strconv strings ) var ans []string var path []byte func dfs(n int, left int, right int) { if right n { ans append(ans, string(path)) return } if left n { path[leftright] ( dfs(n, left1, right) } if right left { path[leftright] ) dfs(n, left, right1) } } func generateParenthesis(n int) []string { ans nil path make([]byte, n*2) dfs(n, 0, 0) return ans } func main() { data, _ : os.ReadFile(input.txt) nums : strings.Fields(string(data)) for _, s : range nums { n, _ : strconv.Atoi(s) result : generateParenthesis(n) fmt.Printf(n %d\n, n) fmt.Println(result) fmt.Println() } }C#includeiostream #includevector #includestring #includefstream using namespace std; vectorstringans; string path; void dfs(int n, int left, int right) { if(right n) { ans.emplace_back(path); return; } if(left n) { path[left right] (; dfs(n, left 1, right); } if(right left) { path[left right] ); dfs(n, left, right 1); } } vectorstring generateParenthesis(int n) { ans.clear(); path string(n * 2, ); dfs(n, 0, 0); return ans; } int main() { ifstream ifs(input.txt); int n; while(ifs n) { auto result generateParenthesis(n); cout n n endl; cout [; for(int i 0; i result.size(); i) { cout result[i]; if(i ! result.size() - 1) { cout ,; } } cout ] endl endl; } return 0; }TypeScriptimport * as fs from fs; function generateParenthesis(n: number) :string[] { let ans:string[] []; let path:string[] new Array(n * 2); function dfs(left: number, right: number) { if(right n) { ans.push(path.join()); return; } if(left n) { path[left right] (; dfs(left 1, right); } if(right left) { path[left right] ); dfs(left, right 1); } } dfs(0, 0); return ans; } function main() { const data fs.readFileSync( input.txt, utf-8 ); const nums data.trim().split(/\s/); for(const s of nums) { const n Number(s); const result generateParenthesis(n); console.log(n ${n}); console.log(result); console.log(); } } main();

相关新闻

数据资产盘点:用资源血缘让BI从‘黑盒‘变成‘透明工厂‘

数据资产盘点:用资源血缘让BI从‘黑盒‘变成‘透明工厂‘

导语 在与客户交流BI选型时,常常被问到的一个高频问题不再是"图表好不好看"“性能够不够快”,而是——“这个平台能不能让我说清楚,每一个指标是怎么来的、动一下会影响谁?” 这个问题的出现,标志着企业选型…

2026/7/29 13:46:49阅读更多 →
基于树莓派Pico的简易示波器:低成本便携信号观测方案

基于树莓派Pico的简易示波器:低成本便携信号观测方案

1. 项目概述与核心价值 最近在捣鼓一些嵌入式的小项目,调试I2C、SPI信号时,手头那台笨重的台式示波器搬来搬去实在不方便。于是萌生了一个想法:能不能用我抽屉里吃灰的树莓派Pico,自己动手做一个便携、够用的简易示波器&#xff1…

2026/7/29 13:44:49阅读更多 →
Arduino蜂鸣器深度解析:从驱动电路到音乐编程实战

Arduino蜂鸣器深度解析:从驱动电路到音乐编程实战

1. 项目概述:从“滴滴”声到旋律的跨越蜂鸣器,这个在电子世界里最常见的声音元件,你可能在无数设备里听过它的声音——微波炉完成加热的提示音、洗衣机结束工作的鸣叫,或是老式电脑开机自检通过的那一声“滴”。在Arduino的世界里…

2026/7/29 13:44:49阅读更多 →
Python vs Rust AI 服务基准测试全景:FastAPI、Axum、Actix-Web 的延迟与吞吐

Python vs Rust AI 服务基准测试全景:FastAPI、Axum、Actix-Web 的延迟与吞吐

Python vs Rust AI 服务基准测试全景:FastAPI、Axum、Actix-Web 的延迟与吞吐 一、AI 服务框架选型的基准痛点 AI 推理服务的 HTTP 框架选型直接影响请求路由、批处理调度、流式输出的性能。三个主流框架:FastAPI(Python)、Axum&a…

2026/7/29 15:03:03阅读更多 →
QuickRecorder:5分钟掌握macOS专业屏幕录制,免费开源轻松上手

QuickRecorder:5分钟掌握macOS专业屏幕录制,免费开源轻松上手

QuickRecorder:5分钟掌握macOS专业屏幕录制,免费开源轻松上手 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitc…

2026/7/29 15:03:03阅读更多 →
ssm 儿童教育资源整合系统

ssm 儿童教育资源整合系统

一、关键词儿童教育资源整合系统、儿童教育资源整合、儿童教育资源整合信息管理、儿童教育资源整合后台管理二、作品包含源码数据库全套环境和工具资源本地部署教程三、项目技术前端技术: Html、Css、Js、Vue2.6、Element-ui后端技术:Java、SSM&#xff…

2026/7/29 15:03:03阅读更多 →
【Python量化实战 #04】Python量化技术指标:MACD、KDJ、均线数据接口调用与pandas示例

【Python量化实战 #04】Python量化技术指标:MACD、KDJ、均线数据接口调用与pandas示例

系列:Python 行情数据接入笔记(持续更新) 本文:#04 技术指标数据 指标可以本地用收盘价重算,也可以由数据接口直接给出。本篇演示通过 mairui 读取 MACD、KDJ、均线等序列,并给一个「读字段 → 简单交叉判断…

2026/7/29 15:03:03阅读更多 →
AI如何用10分钟完成专业PPT制作?核心技术解析

AI如何用10分钟完成专业PPT制作?核心技术解析

1. 项目概述:AI如何重塑PPT制作流程 上周团队季度汇报前夜,我盯着空白幻灯片界面到凌晨两点,突然意识到传统PPT制作流程存在巨大效率黑洞。从内容构思、版式设计到动画调整,每个环节都在吞噬职场人的宝贵时间。这正是Paperzz这类A…

2026/7/29 15:03:03阅读更多 →
静磁场仿真中的GPU加速与并行计算技术解析

静磁场仿真中的GPU加速与并行计算技术解析

1. 静磁场仿真中的并行计算与GPU加速概述 静磁场仿真作为电磁场数值计算的重要分支,在电机设计、磁悬浮系统、医疗设备开发等领域具有广泛应用。传统串行计算方法在处理大规模网格模型时面临计算效率瓶颈,而并行计算技术特别是GPU加速已成为突破这一瓶颈…

2026/7/29 15:01:03阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →