** Вопрос заключается в том, чтобы «написать функцию для генерации всех комбинаций правильно сформированных скобок длиной 2 * n. * Например, при n = 3 набор решений:« ((())) »,"(() ())", "(()) ()", "() (())", "() () ()". *
первый код, в котором я выполняю функциювызовите вот так
GenerateParenthesis (n, l + 1, r, ans)
работают нормально и выводят желаемый результат: ((())) Но во втором кодекогда я делаю вызов функции, как
l = l + 1; GenerateParenthesis (n, l, r, ans)
; дать вывод как:))).? // l используется для открытой скобки (слева), а r используется для закрывающей скобки (справа)
Вот два кода
void GenerateParenthesis (int n, int l, int r, vector & ans) {
if (l == n && r == n) {
ans.push_back(helper);
return;
}
if (r > l)return;
if (l > n || r >= n)return;
helper.push_back('(');
GenerateParenthesis(n, l + 1, r, ans);
helper = helper.substr(0, helper.size() - 1); //pop_back();
helper.push_back(')');
GenerateParenthesis(n, l, r + 1, ans);
helper = helper.substr(0, helper.size() - 1); //pop_back();
}
void GenerateParenthesis (int n, int l, int r, vector & ans) {
if (l == n && r == n) {
ans.push_back(helper);
return;
}
if (r > l)return;
if (l > n || r >= n)return;
helper.push_back('(');
l=l+1;
GenerateParenthesis(n, l , r, ans);
helper = helper.substr(0, helper.size() - 1);
helper.push_back(')');
r=r+1;
GenerateParenthesis(n, l, r, ans);
helper = helper.substr(0, helper.size() - 1);
}