22. 括号生成
数字 n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
有效括号组合需满足:左括号必须以正确的顺序闭合。
示例 1:
输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
输入:n = 1
输出:["()"]
提示:
- 1 <= n <= 8
题目链接:22. 括号生成 - 力扣(LeetCode) (leetcode-cn.com)
解题思路
- 确定dp动态数组,确定下标的含义
- 设置一维的动态数组,大小为(n+1)
dp[i]
表示i
对括号生成的有效的括号组合- 每个
dp[i]
也是一个一维数列
- 确定递推公式
- n对括号由n-1对括号再加上一对,这一对括号加在哪里
- 如何得到n-1对括号,可以将这n-1对括号分成两个部分,一个部分p对括号,另一个部分q对括号,且
p+q = n-1
,且p和q都是非负整数 - 遍历
dp[p]
、dp[q]
将他们进行组合"(" + dp[p]中的元素 + ")" + dp[q]中的元素
- 数组的初始化
dp[0]
使用0对括号,即dp[0] = [""]
dp[1]
使用1对括号,即dp[1] = ["()"]
- 数组的遍历顺序,从
i = 2
开始遍历,即for i in range(2,n+1)
- 最后返回
dp[n]
class Solution: def generateParenthesis(self, n: int) -> List[str]: # 创建dp数组,大小为(n+1) dp = [[] for i in range(n+1)] # 初始化数组 dp[0] = [""] dp[1] = ["()"] for i in range(2,n+1): for p in range(i): q = i-1-p for k1 in dp[p]: for k2 in dp[q]: new = "(" + k1 + ")" + k2 dp[i].append(new) return dp[n]
分类:
leetcode刷题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人