22. Generate Parentheses
题目描述:
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:
[ "((()))", "(()())", "(())()", "()(())", "()()()" ]
算法描述:
由题意知,给出一个数 n,根据 n 返回一个包含 “正确” 的括号组合的 vector ,如当 n=1时:[ () ];当 n=2 时:[ ()(), (()) ];当 n=3 时:[ ((())), (()()), (())(), ()(()), ()()() ]……
我们利用递归的思想,需要记录填入左边和右边的括号数,如果左边括号数小于 n,填入“(”,进如递归函数,完成左边的括号填充后,如果右边括号数小于左边括号数,填入“)”,并进入递归函数,结束的条件是右边括号数等于 n。
用别人的一张图来表示这个思想 (链接:点击打开链接 )
代码:
class Solution {
public:
vector<string> ans;
vector<string> generateParenthesis(int n) {
func(0, 0, "", n);
return ans;
}
void func(int l, int r, string s, int n){
if(r==n){
ans.push_back(s);
}
if(l<n){
func(l+1, r, s+'(', n);
}
if(r<l){
func(l, r+1, s+')', n);
}
}
};