题目:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
解法:
方法一、考虑剩下的括号
import "strings"
var ans []string
func generateParenthesis(n int) []string {
ans = make([]string, 0)
left, right := n, n
find("", left, right)
return ans
}
func find(str string, left, right int) {
if left == 0 && right == 0 {
ans = append(ans, str)
return
}
// 剩余的左边括号数==右边括号数,必须使用左括号
if left == right {
find(str + "(", left - 1, right)
} else if left < right {
// 剩余的左边括号数<右边括号数,可使用左或者右
if left > 0 {
find(str + "(", left - 1, right)
}
find(str + ")", left, right - 1)
} else {
// 剩余的左边括号数>右边括号数,非法了,剪枝
}
}
方法二、回溯