题目名称
Generate Parentheses—LeetCode链接
描述
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 时,就可以放置新的左括号。当右括号出现次数小于左括号出现次数时,就可以放置新的右括号。
C++代码
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> res;
if(n>0)
generate(n,"",0,0,res);
return res;
}
void generate(int n, string s, int l, int r, vector<string> &res) {
if(l==n) {
res.push_back(s.append(n-r,')'));
return;
}
generate(n,s+"(",l+1,r,res);
if(l>r)
generate(n,s+")",l,r+1,res);
}
};
总结
代码是参考别人的,递归还不是很熟悉,需要多多练习。