给定 n 对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
样例
给定 n = 3
, 可生成的组合如下:
"((()))", "(()())", "(())()", "()(())", "()()()"
class Solution {
public:
/**
* @param n n pairs
* @return All combinations of well-formed parentheses
*/
vector<string> generateParenthesis(int n) {
// Write your code here
int leftNum = 0;
int rightNum = 0;
vector<char> buf;
vector<string> result;
visit(n, leftNum, rightNum, buf, result);
return result;
}
private:
void visit(int n, int &leftNum, int &rightNum,
vector<char> &buf, vector<string> &result)
{
if (leftNum == n && rightNum == n)
{
string temp;
for (int i = 0; i < buf.size(); i++)
{
temp += buf[i];
}
result.push_back(temp);
return;
}
if (leftNum < n)
{
buf.push_back('(');
leftNum++;
visit(n, leftNum, rightNum, buf, result);
buf.pop_back();
leftNum--;
}
if (rightNum < leftNum)
{
buf.push_back(')');
rightNum++;
visit(n, leftNum, rightNum, buf, result);
buf.pop_back();
rightNum--;
}
}
};