essay

hot100-括号生成

#算法

hot100——括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

示例 1:

输入:n = 3

输出:["((()))","(()())","(())()","()(())","()()()"]

示例 2:

输入:n = 1

输出:["()"]

提示:

1 <= n <= 8

解法

// generateParenthesis 生成所有有效的括号组合
func generateParenthesis(n int) []string {
    res := make([]string, 0)          // 存放结果集
    backtrack(n, 0, 0, "", &res)       // 从空字符串开始回溯
    return res
}
 
// backtrack 递归回溯函数
// n:     括号对数
// left:  当前已使用的左括号数量
// right: 当前已使用的右括号数量
// cur:   当前构建的括号字符串
// res:   指向结果集的指针
func backtrack(n int, left int, right int, cur string, res *[]string) {
    // 当字符串长度达到 2*n 时,说明生成了一个完整组合
    if len(cur) == 2*n {
        *res = append(*res, cur)
        return
    }
    // 如果左括号数量小于 n,可以添加一个左括号
    if left < n {
        backtrack(n, left+1, right, cur+"(", res)
    }
    // 如果右括号数量小于左括号数量,可以添加一个右括号(保证有效性)
    if right < left {
        backtrack(n, left, right+1, cur+")", res)
    }
}
comments如果有不同意见或者补充,直接留在这里。
contact

在别处继续找到我

如果你想聊技术、设计,或者只是打个招呼。

暂未配置外部链接