题目描述
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:
["((()))","(()())","(())()","()(())","()()()"
]
分析
这道题比较容易想到的就是用递归DFS来求解。使用两个参数分别表示左括号和右括号的剩余数量,递归的终止条件是右括号的剩余数量小于左括号的剩余数量,只有这样才会产生括号不匹配的情况。其他情况就使结果字符串加上左括号或者右括号,并使相应的括号数量减一,继续递归。直到所有括号都使用完,这时将字符串保存在结果中。
AC代码如下:
class Solution {
public:vector<string> generateParenthesis(int n) {
vector<string> result;dfs(n, n, "", result);return result;}int dfs(int ln, int rn, string s, vector<string>& result){
if(ln > rn)//括号不匹配的情况{
return 0;}if(ln == 0 && rn == 0)//递归结束,保存结果{
result.push_back(s);}if(ln > 0)//左括号{
dfs(ln-1, rn, s+'(', result);}if(rn > 0)//右括号{
dfs(ln, rn-1, s+')', result);}return 0;}
};