22. 括号生成
代码实现:
func generateParenthesis(n int) []string {
if n == 0 {
return []string{}
}
res := []string{}
findGenerateParenthesis(n, n, "", &res)
return res
}
/*
回溯跳出条件,
并不需要判断左括号是否用完,因为右括号生成的条件 right > left ,
所以右括号用完了就意味着左括号必定用完了
*/
func findGenerateParenthesis(left, right int, str string, res *[]string) {
if left == 0 && right == 0 {
*res = append(*res, str)
return
}
// 生成左括号
if left > 0 {
findGenerateParenthesis(left-1, right, str+"(", res)
}
// 括号成对存在,有左括号才会有右括号
if right > 0 && left < right {
findGenerateParenthesis(left, right-1, str+")", res)
}
}
解题思路: DFS 回溯,看注释即可。