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:
1: n <= 0; 2:采用递归的方式,设置left和right分别代表做括号和右括号的数值。3:在字符串中始终先排左括号(left > 0); 4:当right > left时, 排右括号;4:注意递归结束的条件(left == 0 && right == 0),并保存这种括号的顺序
vector<string> generateParenthesis(int n)
{
vector<string> result;
if(n <= 0)
return result;
string temp;
generateParenthesisCore(n, n, temp, result);
return result;
}
void generateParenthesisCore(int left, int right, string& temp, vector<string> &result)
{
if(left == 0 && right == 0)
{
result.push_back(temp);
return;
}
if(left > 0)
{
temp.push_back('(');
generateParenthesisCore(left - 1, right, temp, result);
temp.pop_back();
}
if(right > left)
{
temp.push_back(')');
generateParenthesisCore(left, right-1, temp, result);
temp.pop_back();
}
}