LEETCODE算法22.Generate Parenthesese
题目
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
For example, given n = 3, a solution set is:
[ "((()))", "(()())", "(())()", "()(())", "()()()"]
题解
1 | //深度优先搜索,限制条件为左括号小于括号数可以添加一个左括号,右括号小于现有的左括号时可以添加一个右括号 |
动态规划
- 动态规划其实类似于归纳法
- 设
i=n
时,(a)b
为当前所有可能的组合,a和b一共含有n对括号且可以为0,相当于去除第一对括号组合- 这样我们就可以去考虑a和b分别的可能性了,然而a和b同时分别是
i
对和j
对括号的所有可能性(i+j=n-1
)。这样我们就有两种思路,一种直接求
i=n
,然后取出第一对括号后递归查找(可以保存中间结果节约时间),这就是官方题解3;第二种是从i=1
开始查找所有配对可能直到i=n
,这就是动态规划,原理其实一样的,一个用了系统的栈,一个自己从头遍历,目测用时应该差距不大。
1 | //动态规划 |