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]
浙公网安备 33010602011771号