老卫带你学---leetcode刷题(22. 括号生成)

22. 括号生成

问题:

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:

输入:n = 1
输出:["()"]
提示:

1 <= n <= 8

解决:

dfs深度优先搜索

var res []string
func generateParenthesis(n int) []string {
	res = []string{}
	cur := ""
	dfs(cur,n,n)
	return res
}

func dfs(cur string,l,r int){ //cur从根结点到叶子结点的路径字符串;l左括号还可以使用的个数;r右括号还可以使用的个数
	if l==0 && r==0{
		res = append(res, cur)
		return
	}
	if r<l{
		return
	}
	if l>0{
		dfs(cur+"(",l-1,r)
	}
	if r>0{
		dfs(cur+")",l,r-1)
	}
}

你可能感兴趣的:(leetcode,算法)