leetcode22.括号生成|刷题打卡

208 阅读1分钟

leetcode22. 括号生成

题目描述:

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

输入:n = 3
输出:["((()))","(()())","(())()","()(())","()()()"]

代码模版(swift)

class Solution {
    func generateParenthesis(_ n: Int) -> [String] {

    }
}

思路(按括号序列的长度递归)

class Solution {
    var ans = [String]() // 全局维护答案数组
    func generateParenthesis(_ n: Int) -> [String] {
        dfs("", n, 0) // 递归
        return ans
    }
    
    func dfs(_ str: String, _ n: Int, _ leftCount: Int) { // str: 添加中的括号字符串, n还可以添加的左括号, leftCount:未配对的左括数目
        if n == 0 && leftCount == 0 { // 不能继续添加左括号并且所有左括号已经配对,加入答案
            ans.append(str)
            return
        }
        if leftCount == 0 { // 不存在未配对括号,则添加左括号
            var newStr = str
            newStr.append("(")
            dfs(newStr, n-1, 1) // 传入添加好的括号,需要添加括号数-1,未配对左括号数+1
        } else { // 存在未配对左括号
            if n != 0 { //仍然可以添加左括号
                var leftStr = str
                leftStr.append("(")
                dfs(leftStr, n-1, leftCount+1) 传入添加好的括号,需要添加括号数-1,未配对左括号数+1
            }
            var rightStr = str
            rightStr.append(")") 
            dfs(rightStr, n, leftCount-1) // 添加右括号,需要配对的左括号数-1
        }
    }
}

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情