题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例:
输入:n = 3
输出:[
“((()))”,
“(()())”,
“(())()”,
“()(())”,
“()()()”
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/generate-parentheses
题解
对于n对的括号,那么从小到达进行生成的时候,我们可以发现,后面的括号序列,完全可以根据之前的括号序列生成
设
d
p
[
i
]
dp[i]
dp[i]表示
i
i
i对括号生成的序列,对于某个
i
i
i相对于小于
i
i
i的括号序列,可以生成
"
(
"
+
d
p
[
j
]
+
"
)
"
+
d
p
[
i
−
j
−
1
]
j
=
0
,
1
,
2
,
⋯
i
−
1
"(" + dp[j]+")" + dp[i-j-1] \quad j = 0,1,2,\cdots i-1
"("+dp[j]+")"+dp[i−j−1]j=0,1,2,⋯i−1
那么根据这个生成方式,可以使用动态规划的方式进行生成。
代码
func generateParenthesis(n int) []string {
dp := make([][]string,0)
dp0 := make([]string,0)
dp0 = append(dp0,"")
dp = append(dp,dp0)
for i:=1;i<=n;i++ {
temp := make([]string,0)
for j:=0;j<i;j++{
s1 := dp[j]
s2 := dp[i-j-1]
for _,value1 := range s1 {
for _,value2 := range s2 {
temp = append(temp, "("+value1 + ")" + value2)
}
}
}
dp = append(dp, temp)
}
return dp[n]
}