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 春招闯关活动」, 点击查看活动详情