算法:如果左括号数量小于 n,我们可以放一个左括号。如果右括号数量小于左括号的数量,我们可以放一个右括号
class Solution
{
void backtrack(vector<string>& ans, string& cur, int open, int close, int n)
{
if (cur.size() == n * 2)
{
ans.push_back(cur);
return;
}
if (open < n)
{
cur.push_back('(');
backtrack(std::ref(ans), std::ref(cur), open + 1, close, n);
cur.pop_back();
}
if (close < open)
{
cur.push_back(')');
backtrack(std::ref(ans), std::ref(cur), open, close + 1, n);
cur.pop_back();
}
}
public:
vector<string> generateParenthesis(int n)
{
vector<string> vec;
string s;
backtrack(std::ref(vec), std::ref(s), 0, 0, n);
return vec;
}
};
int main()
{
Solution A;
A.generateParenthesis(3);
return 0;
}