给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。
例如,给出 n = 3,生成结果为:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
思路:递归,已经分发的左括号数目必须大于等于右括号的数目。二者又同时小于n
var res []string
func dfs (n int, l int, r int, str string){
if l > n || r > n{
return
}
if l == n && r == n{
res = append(res, str)
}else{
if l<n {
str1 := str + "("
dfs(n, l+1, r, str1)
}
if l>r{
str2 := str+")"
dfs(n, l, r+1, str2)
}
}
}
func generateParenthesis(n int) []string {
res = nil
dfs(n, 0, 0, "")
return res
}