题目:
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对括号,要求生成不同搭配组合的括号。要找出所有满足条件的解,可以用深搜算法,用递归来实现,算法复杂度为o(2^n)。由于左括号一定优先于右括号,算法执行时按先给左括号,然后在确定已给的左括号大于右括号的情况下,再给右括号。代码:
class Solution {
public:
//递归过程
void generate(vector<string>& result,string s,int m,int n)
{
if(m==0&&n==0) result.push_back(s);//递归结束条件
else
{
if(m!=0) generate(result,s+'(',m-1,n);//放左括号
if(m<n&&n!=0) generate(result,s+')',m,n-1);//放右括号
}
}
vector<string> generateParenthesis(int n) {
vector<string> result;
string temp="";
if(n==0) return result;
generate(result,temp,n,n);
return result;
}
};