Problem
Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
Example1
Given n = 3, a solution set is:
[ “((()))”, “(()())”, “(())()”, “()(())”, “()()()” ]
Solution
经典回溯。
class Solution {
public:
vector<string> generateParenthesis(int n) {
vector<string> ret;
if(n == 0)
return ret;
backtrack(n,n,"",ret);
return ret;
}
void backtrack(int leftRemain,int rightRemain,string cur,vector<string> &ret)
{
if(leftRemain > rightRemain)
return;
if(leftRemain < 0 || rightRemain < 0)
return;
if(leftRemain == 0 && rightRemain == 0)
{
ret.push_back(cur);
return;
}
if(leftRemain > 0)
{
backtrack(leftRemain - 1,rightRemain,cur+'(',ret);
}
if(rightRemain > 0)
{
backtrack(leftRemain,rightRemain - 1,cur+')',ret);
}