22. 括号生成

94 阅读1分钟

题目: 数字 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 {
       // 剩余的左边括号数>右边括号数,非法了,剪枝
    }
}

方法二、回溯