题目
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
题意
给定一个数字n,求出n个括号的正确组合方式
例子
[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
题解
设定两个变量left ,right表示左右括号的个数,然后求左右括号的所有组合,其中需要排除掉一些错误的组合,当递归到left大于right时,即此时的字符串中有括号的个数大于左括号,即出现了)(这样的组合,跳过该组合。
代码
var res []string
func generateParenthesis(n int) []string {
    left:=n
    right:=n
    res = make([]string,0)
    Combine("",left,right,n*2)
    return res
}
func Combine(str string,left,right int,num int){
    
    if left>right{
        return
    }
    
    if len(str)==num{
        res = append(res,str)
        return
    }
    
    if left!=0{
        Combine(str+"(",left-1,right,num)
        if right!=0{
            Combine(str+")",left,right-1,num)
            return
        }
    }
    
    if right!=0{
        Combine(str+")",left,right-1,num)
        if left!=0{
            Combine(str+")",left-1,right,num)
            return
        }
    }
    
}
总结
一开始没好好看题目,直接写出组合的代码,结果发现是要正确的括号组合。所以这道题最重要的地方就在于,当left的剩余数量小于right时,即出现了错误的组合,因为一旦出现了一个(,即必须要有一个)与之对应,所以总是left>=right。
