題目
數字 n 代表生成括號的對數,請你設計一個函數,用于能夠生成所有可能的并且 有效的 括號組合。
示例
輸入:n = 3
輸出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
解析
func generateParenthesis(n int) []string {m := 2 * nans := []string{}var path []bytevar dfs func(i, left int)dfs = func(i, left int) {if i == m {ans = append(ans, string(path))}if left < n {path = append(path, '(')dfs(i+1, left+1)path = path[:len(path)-1]}if i-left < left {path = append(path, ')')dfs(i+1, left)path = path[:len(path)-1]}}dfs(0, 0)return ans
}
這道題有如下細節需要注意,首先是n代表括號的對數,那么就需要乘以2來計算出左括號+右括號數量之和;在dfs邏輯中,如果左括號的數量小于n,則代表還有可以存左括號的位置;i-left其實就是右括號,右括號的數量小于left,表示還可以添加右括號