打印n对括号的排列组合。
递归思想,左括号数量小于n的时候则可以继续插入左括号,右括号数量小于n且小于左括号数量时为了满足左右括号相等则插入右括号,终止条件:当string的长度为2n的时候停止并push到vector里面。
注意条件:vector必须用引用,否则每次递归都会创建新拷贝。string需要深拷贝。
void parentheses(vector<string>& vec,string str, int n,int left,int right)
{
if (str.size() == 2 * n)
{
vec.push_back(str);
return;
}
if (left < n)
{
str.append(1, '(');
parentheses(vec, str, n, left + 1, right);
}
if (left > right&&right<n)
{
str.append(1, ')');
parentheses(vec, str, n, left, right+1);
}
}