括号生成

 

 

 

https://leetcode.cn/problems/generate-parentheses/solution/-by-1978-7-owhs/

/**
 * @name: 括号生成
 * @param {int} n 括号的个数
 * @return {*}    
 */
func generateParenthesis(n int) []string {
    res := []string{}

    if n == 0 {
        return res
    }

    dfs("", n, n, &res)
    return res
}

/**
* @name: 深度优先遍历拼接结果
* @param {string} curStr    当前递归得到的结果
* @param {int} leftNum            剩余的左括号个数
* @param {int} rightNum            剩余的右括号个数
* @return {*}
 */
func dfs(curStr string, leftNum int, rightNum int, res *[]string) {
    // 递归终止直接加入结果集,无需回溯
    if leftNum == 0 && rightNum == 0 {
        *res = append(*res, curStr)
        return
    }

    // 剪枝
    if leftNum > rightNum {
        return
    }

    if leftNum > 0 {
        dfs(curStr+"(", leftNum-1, rightNum, res)
    }

    if rightNum > 0 {
        dfs(curStr+")", leftNum, rightNum-1, res)
    }
}

 

posted @ 2022-07-11 14:56  知道了呀~  阅读(60)  评论(0编辑  收藏  举报