funcgenerateParenthesis(n int) []string { if n == 0 { return []string{} } rr := make([]rune, n*2) mm := make(map[string]struct{}) generate(rr, 0, mm) var result []string for m := range mm { result = append(result, m) } return result }
funcvalid(rr []rune)bool { var balance int for _, r := range rr { if r == '(' { balance++ } else { balance-- } if balance < 0 { returnfalse } } return balance == 0 }
funcgenerateParenthesis(n int) []string { if n == 0 { return []string{} } rr := make([]rune, n*2) result = make([]string,0) generate(rr, n, n, n*2) return result }
var result []string
funcgenerate(rr []rune, left, right, length int) { if left == right && left == 0 { result = append(result, string(rr)) return } if left > 0 { rr[length-left-right] = '(' generate(rr, left-1, right, length) } if right > left { rr[length-left-right] = ')' generate(rr, left, right-1, length) } }